區別: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中多程序和多執行緒的區別是什麼的詳細內容,更多請關注TW511.COM其它相關文章!