亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Linux 下進程和線程的選擇問題

Linux 下進程和線程的選擇問題

翻閱古今 2018-07-30 21:29:11
因為 Linux 對進程的處理異常高效,而線程則有時候會遇到諸如鎖定(locking)之類的相關問題,所以通常在 Linux 下總是會去優先使用進程。但當遇到進程和線程處理能力相當的情況時,比如我要寫一個 web 服務器,該如何選擇呢?
查看完整描述

2 回答

?
繁星coding

TA貢獻1797條經驗 獲得超4個贊

多進程服務器的一個重要優勢是如果某個處理單元遇到問題崩潰了(比如SIGSEV),那也只是一個進程崩潰了而已,其他提供服務的進程還都在。

但是如果是用線程的話,一個線程掛了,所有的在同一個進程內的線程就都跪了。

不過這只是一個參考因素而已,具體是用線程還是進程,還得看你所要做的服務器的具體的模型,才能真正下定論。


查看完整回答
反對 回復 2018-08-03
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

1、Linux內核其實是用進程來實現線程的,所以在內核某些方面的處理,兩者資源和開銷可能差不多,但其它平臺的實現就不一定了。
2、如果要實現一個web服務器,一個client連接對應一個線程,和一個client連接對應一個進程,兩者有很大的不同,一個系統最多的進程數是有限制的,數量也不會太多,而線程真的可以有很多(我沒研究過)。當然另一個做法可以是開一個進程來處理多個client連接,但是線程間的同步和數據共享,要比在進程間來得容易,而且進程間的通訊開銷還是比較大的(比如socket、共享內存、消息隊列等)。線程間如果鎖使用不當,比如鎖粒度太大,導致性能不理想,但這是設計的問題。
3、用多進程的方法來實現某些需求很合適,比如像google chrome,每一個網頁(標簽)就用一個進程來處理,所以某個標簽崩潰了(網頁有flash經常會崩潰:)),不會導致整個瀏覽器崩潰,這是選擇進程的優點。缺點也是顯而易見的,開一堆網頁后,發現系統有一堆的進程,用戶和系統內核都不會喜歡這樣的:)另外,一個程序有多個進程并發執行任務,每個進程可以在單獨的CPU中運行,這是比較高效的利用了多(核)CPU,因為線程在多個CPU調度的時候,有數據的共享和同步,在處理時可能要等待其它CPU(或有CPU間的數據共享)讓出鎖,這樣就會有開銷,所以某種程度講,選用多進程模型有時是有意利用多CPU(不知這樣說得不得當?)
4、由于對系統來說,一個進程的資源是有限制的,比如文件打開的最大數量、能創建的線程的數量、網絡連接數量等,所以通常對一個服務器程序來說,在一個機器上運行多個實例(多個進程)也是一個提高機器性能使用率的方法。

所以,不能一概而定,線程和進程各有存在的目的和意義,要根據自己程序的需求來選擇。以上我只是把一些相關的東西列出來,具體需要你自己去搜索和證實。


查看完整回答
反對 回復 2018-08-03
  • 2 回答
  • 0 關注
  • 721 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號