linux中多進程和多線程的區別是什么

區別:1、多進程中數據共享復雜、同步簡單,而線程中數據共享簡單、同步復雜;2、多進程占用內存多、切換復雜、速度慢、CPU利用率低,而多線程占用內存少、切換簡單、CPU利用率高;3、多進程的編程簡單、調試簡單,而多線程的編程復雜、調試復雜。

linux中多進程和多線程的區別是什么

本教程操作環境:linux5.9.8系統、Dell G3電腦。

linux中多進程和多線程的區別

進程:運行中(加載到內存上)的程序。–>執行過程稱之為進程。

線程:線程是輕量級的進程,是進程中的一條執行序列(一組有序指令),一個進程至少有一條線程。

main函數所代表的執行序列稱之為主線程。通過線程庫創建的線程稱之為函數線程。

對比維度 多進程 多線程 總結
數據共享,同步

數據共享復雜,需要用IPC;

數據是分開的,同步簡單

因為共享進程數據,共享數據簡單,同時導致同步也復雜 各有優勢
內存、CPU 占用內存多,切換復雜,速度慢,CPU利用率低 占用內存少,切換簡單CPU利用率高 多線程優勢
創建銷毀、切換 創建銷毀,切換復雜,速度慢 創建銷毀,切換簡單,速度很快 多線程優勢
編程調試 編程簡單,調試簡單 編程復雜,調試復雜 多進程優勢
可靠性 進程間不會互相影響 一個線程掛掉將導致整個進程掛掉 多進程優勢
分布式 適用于多核、多機分布式;如果一臺機器不夠,拓展到多臺機器比較簡單 適用于多核分布式 多進程優勢

多線程的優點:

  • 無需跨進程邊界;

  • 程序邏輯和控制方式簡單;

  • 所有線程可以直接共享內存和變量;

  • 線程方式消耗的總資源比進程少

多進程的優點

  • 每個進程相互獨立,不影響主程序的穩定性,子進程崩潰沒關系;

  • 通過增加CPU就可以容易擴充性能;

  • 可以盡量減少線程加鎖/解鎖的影響,極大提高性能;

多線程的缺點:?

  • 每條線程與主程序共用地址空間,大小受限;

  • 線程之間的同步和加鎖比較麻煩;

  • 一個線程的崩潰可能影響到整個程序的穩定性;

  • 到達一定的線程數后,即使在增加CPU也無法提高性能;

多進程的缺點:?

  • 邏輯控制復雜,需要和主程序交互;

  • 需要跨進程邊界,如果有大數據傳輸,不適合;

  • 多進程調度開銷比較大

應用情況如下:

1)需要頻繁創建銷毀的用線程

? ? ? ? 這種原則最常見的就是Web服務器了,來一個連接建立一個線程,斷了就銷毀線程。如果用進程,創建銷毀的代價是很難承受的。

2)需要進行大量計算的優先用線程

? ? ? ? 所謂大量計算就是消耗很多CPU,切換頻繁,這種情況下線程是最合適的。

? ? ? ? 這種原則最常用的就是圖像處理,算法處理。

3)強相關的處理用線程,弱相關的處理用進程

? ? ? ? 什么叫強相關、弱相關?理論上很難定義,舉一個例子加以解釋。

? ? ? ? 一般的Server需要完成如下任務:消息收發、消息處理。“消息收發”、“消息處理”就是弱相關的處理,而“消息處理”里面又分為“消息解碼”、“業務處理”,這兩個業務相對來說就強很多。因此“消息收發”、“消息處理”可以分進程設計,“消息解碼”、“業務處理”可以分線程設計。

4)可能擴展到多機分布的用進程,多核分布的用線程(具體原因請看上表)

消耗資源:

? ? ? ? 從內核的觀點看,進程的目的就是擔任分配系統資源(CPU時間、內存等)的基本單位。線程是進程的一條執行流,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。

? ? ? ? 線程,他們之間使用相同的地址空間,共享大部分數據,啟動一個線程所花費的空間遠遠小于啟動一個進程所花費的空間,而且線程間彼此切換所需要的時間也遠遠小于進程間切換所用的時間。

通訊方式:

? ? ? ? 進程間傳遞數據只能通過通訊的方式,既費時又不方便。線程時間數據大部分共享,快捷方便,但是數據同步需要鎖。

線程自身優勢:

? ? ? ? 提高應用程序相應;使用CPU系統更加有效;操作系統會保證當線程數目不大于CPU數目時候,不同的線程運行在不同的CPU上;改善程序結構,一個即長又復雜的進程可以考慮分為多個線程,成為幾個獨立或者半獨立的部分,這樣的程序會易于理解和修改。

相關推薦:《Linux視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享