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

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

Linux中的線程與進程

Linux中的線程與進程

慕慕森 2019-09-18 10:38:40
我最近聽過一些人說在Linux中,使用進程而不是線程幾乎總是更好,因為Linux在處理進程方面非常有效,并且因為線程有很多問題(例如鎖定)。但是,我很懷疑,因為在某些情況下,線程似乎可以帶來相當大的性能提升。所以我的問題是,當遇到線程和進程都能很好地處理的情況時,我應該使用進程還是線程?例如,如果我正在編寫Web服務器,我應該使用進程或線程(或組合)嗎?
查看完整描述

3 回答

?
翻過高山走不出你

TA貢獻1875條經驗 獲得超3個贊

Linux使用1-1線程模型,(對內核)沒有進程和線程之間的區別 - 一切都只是一個可運行的任務。*

在Linux上,系統調用clone克隆任務,具有可配置的共享級別,其中包括:

  • CLONE_FILES:共享相同的文件描述符表(而不是創建副本)

  • CLONE_PARENT:不要在新任務和舊任務之間建立父子關系(否則,孩子的getppid()=父母的getpid()

  • CLONE_VM:共享相同的內存空間(而不是創建COW副本)

fork()呼叫clone(最少共享)pthread_create()呼叫clone(大多數共享)。**

forkpthread_create由于復制表和為內存創建COW映射,成本只是一點點,但Linux內核開發人員已經嘗試(并成功)降低了這些成本。

如果任務共享相同的內存空間和各種表,則在任務之間切換比不共享任務要便宜一點,因為數據可能已經加載到緩存中。但是,即使沒有共享任何內容,切換任務仍然非???- 這是Linux內核開發人員試圖確保(并成功確保)的其他內容。

實際上,如果您使用的是多處理器系統,則不共享可能實際上對性能有益:如果每個任務在不同的處理器上運行,則同步共享內存非常昂貴。


*簡化。 CLONE_THREAD導致信號傳遞被共享(需要CLONE_SIGHAND,共享信號處理程序表)。

**簡化。存在兩個SYS_forkSYS_clone系統調用,但在內核中,sys_fork并且sys_clone它們都是圍繞同一do_fork函數的非常薄的包裝器,它本身就是一個薄的包裝器copy_process。是的,術語process,thread以及task相當互換使用Linux內核...


查看完整回答
反對 回復 2019-09-18
  • 3 回答
  • 0 關注
  • 658 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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