進(jìn)程
進(jìn)程產(chǎn)生由來:計(jì)算機(jī)一次只能執(zhí)行一個(gè)任務(wù),如果某個(gè)任務(wù)需要從I/O設(shè)備讀取大量數(shù)據(jù),此I/O操作過程中CPU是空閑的,可以用來進(jìn)行其他操作。因此發(fā)明了進(jìn)程,用進(jìn)程來對應(yīng)一個(gè)任務(wù)。
進(jìn)程的特點(diǎn):每個(gè)進(jìn)程有獨(dú)立的內(nèi)存空間,進(jìn)程間互不相關(guān),由操作系統(tǒng)來進(jìn)行調(diào)度。
多進(jìn)程并行:當(dāng)時(shí)CPU還沒有多核、多線程的概念,為了達(dá)到多進(jìn)程并行運(yùn)行的目的,采用了分時(shí)的方式,即把CPU的時(shí)間分成很多片段,每個(gè)片段只能執(zhí)行某個(gè)進(jìn)程中的指令。雖然從操作系統(tǒng)和CPU的角度來說還是串行處理的,但是由于CPU的處理速度很快,從用戶的角度感覺像是多進(jìn)程并行處理。
進(jìn)程間通信:由于每個(gè)進(jìn)程有獨(dú)立的內(nèi)存空間,進(jìn)程間互不相關(guān),但是有時(shí)候希望兩個(gè)進(jìn)程之間能夠進(jìn)行通信。如果不能通信只能是A存儲(chǔ)到磁盤,B需要數(shù)據(jù)再從磁盤讀取,效率低且設(shè)計(jì)復(fù)雜。為了解決進(jìn)程間通信的問題,設(shè)計(jì)出了包括管道、消息隊(duì)列、信號(hào)量、共享存儲(chǔ)等各種方式。
線程
線程產(chǎn)生由來:多進(jìn)程能讓多任務(wù)并行處理,但是單個(gè)進(jìn)程內(nèi)部只能串行處理。實(shí)際上進(jìn)程內(nèi)部的各個(gè)子任務(wù)并不要求嚴(yán)格按照時(shí)間順序來執(zhí)行,也需要并行處理。因此發(fā)明了線程。
線程的特點(diǎn):線程是進(jìn)程內(nèi)部的子任務(wù),共享一份進(jìn)程數(shù)據(jù)。為了保證共享數(shù)據(jù)的準(zhǔn)確性,又發(fā)明了互斥鎖機(jī)制。
對比維度 | 多進(jìn)程 | 多線程 | 總結(jié) |
數(shù)據(jù)共享、同步 | 數(shù)據(jù)共享復(fù)雜,需要用IPC;數(shù)據(jù)是分開的,同步簡單 | 因?yàn)楣蚕磉M(jìn)程數(shù)據(jù),數(shù)據(jù)共享簡單,但也是因?yàn)檫@個(gè)原因?qū)е峦綇?fù)雜 | 各有優(yōu)勢 |
內(nèi)存、CPU | 占用內(nèi)存多,切換復(fù)雜,CPU利用率低 | 占用內(nèi)存少,切換簡單,CPU利用率高 | 線程占優(yōu) |
創(chuàng)建銷毀、切換 | 創(chuàng)建銷毀、切換復(fù)雜,速度慢 | 創(chuàng)建銷毀、切換簡單,速度很快 | 線程占優(yōu) |
編程、調(diào)試 | 編程簡單,調(diào)試簡單 | 編程復(fù)雜,調(diào)試復(fù)雜 | 進(jìn)程占優(yōu) |
可靠性 | 進(jìn)程間不會(huì)互相影響 | 一個(gè)線程掛掉將導(dǎo)致整個(gè)進(jìn)程掛掉 | 進(jìn)程占優(yōu) |
分布式 | 適應(yīng)于多核、多機(jī)分布式;如果一臺(tái)機(jī)器不夠,擴(kuò)展到多臺(tái)機(jī)器比較簡單 | 適應(yīng)于多核分布式 | 進(jìn)程占優(yōu) |
聯(lián)系客服