區別:1、多進程中資料共享複雜、同步簡單,而多執行緒中資料共享簡單、同步複雜;2、多進程佔用記憶體多、切換複雜、速度慢、CPU利用率低,而多執行緒佔用記憶體少、切換簡單、CPU利用率高;3、多進程的程式設計簡單、調試簡單,而多執行緒的程式設計複雜、調試複雜。
本教學操作環境: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影片教學》
以上是linux中多進程和多執行緒的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!