進程——操作系統資源分配的最小單位 線程——是操作系統CPU調度的最小單位 進程 進程產生由來:電腦一次只能執行一個任務,如果某個任務需要從I/O設備讀取大量數據,此I/O操作過程中CPU是空閑的,可以用來進行其他操作。因此發明瞭進程,用進程來對應一個任務。 進程的特點:每個進程有獨立的記憶體空間, ...
進程——操作系統資源分配的最小單位
線程——是操作系統CPU調度的最小單位
進程
進程產生由來:電腦一次只能執行一個任務,如果某個任務需要從I/O設備讀取大量數據,此I/O操作過程中CPU是空閑的,可以用來進行其他操作。因此發明瞭進程,用進程來對應一個任務。
進程的特點:每個進程有獨立的記憶體空間,進程間互不相關,由操作系統來進行調度。
多進程並行:當時CPU還沒有多核、多線程的概念,為了達到多進程並行運行的目的,採用了分時的方式,即把CPU的時間分成很多片段,每個片段只能執行某個進程中的指令。雖然從操作系統和CPU的角度來說還是串列處理的,但是由於CPU的處理速度很快,從用戶的角度感覺像是多進程並行處理。
進程間通信:由於每個進程有獨立的記憶體空間,進程間互不相關,但是有時候希望兩個進程之間能夠進行通信。如果不能通信只能是A存儲到磁碟,B需要數據再從磁碟讀取,效率低且設計複雜。為瞭解決進程間通信的問題,設計出了包括管道、消息隊列、信號量、共用存儲等各種方式。
線程
線程產生由來:多進程能讓多任務並行處理,但是單個進程內部只能串列處理。實際上進程內部的各個子任務並不要求嚴格按照時間順序來執行,也需要並行處理。因此發明瞭線程。
線程的特點:線程是進程內部的子任務,共用一份進程數據。為了保證共用數據的準確性,又發明瞭互斥鎖機制。
對比維度 |
多進程 |
多線程 |
總結 |
數據共用、同步 |
數據共用複雜,需要用IPC;數據是分開的,同步簡單 |
因為共用進程數據,數據共用簡單,但也是因為這個原因導致同步複雜 |
各有優勢 |
記憶體、CPU |
占用記憶體多,切換複雜,CPU利用率低 |
占用記憶體少,切換簡單,CPU利用率高 |
線程占優 |
創建銷毀、切換 |
創建銷毀、切換複雜,速度慢 |
創建銷毀、切換簡單,速度很快 |
線程占優 |
編程、調試 |
編程簡單,調試簡單 |
編程複雜,調試複雜 |
進程占優 |
可靠性 |
進程間不會互相影響 |
一個線程掛掉將導致整個進程掛掉 |
進程占優 |
分散式 |
適應於多核、多機分散式;如果一臺機器不夠,擴展到多台機器比較簡單 |
適應於多核分散式 |
進程占優 |
多進程多線程對比
(https://blog.csdn.net/lishenglong666/article/details/8557215)