3 回答

TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個(gè)贊
Linux使用1-1線程模型,(對(duì)內(nèi)核)沒(méi)有進(jìn)程和線程之間的區(qū)別 - 一切都只是一個(gè)可運(yùn)行的任務(wù)。*
在Linux上,系統(tǒng)調(diào)用clone
克隆任務(wù),具有可配置的共享級(jí)別,其中包括:
CLONE_FILES
:共享相同的文件描述符表(而不是創(chuàng)建副本)CLONE_PARENT
:不要在新任務(wù)和舊任務(wù)之間建立父子關(guān)系(否則,孩子的getppid()
=父母的getpid()
)CLONE_VM
:共享相同的內(nèi)存空間(而不是創(chuàng)建COW副本)
fork()
呼叫clone(
最少共享)
和pthread_create()
呼叫clone(
大多數(shù)共享)
。**
fork
pthread_create
由于復(fù)制表和為內(nèi)存創(chuàng)建COW映射,成本只是一點(diǎn)點(diǎn),但Linux內(nèi)核開(kāi)發(fā)人員已經(jīng)嘗試(并成功)降低了這些成本。
如果任務(wù)共享相同的內(nèi)存空間和各種表,則在任務(wù)之間切換比不共享任務(wù)要便宜一點(diǎn),因?yàn)閿?shù)據(jù)可能已經(jīng)加載到緩存中。但是,即使沒(méi)有共享任何內(nèi)容,切換任務(wù)仍然非???- 這是Linux內(nèi)核開(kāi)發(fā)人員試圖確保(并成功確保)的其他內(nèi)容。
實(shí)際上,如果您使用的是多處理器系統(tǒng),則不共享可能實(shí)際上對(duì)性能有益:如果每個(gè)任務(wù)在不同的處理器上運(yùn)行,則同步共享內(nèi)存非常昂貴。
*簡(jiǎn)化。 CLONE_THREAD
導(dǎo)致信號(hào)傳遞被共享(需要CLONE_SIGHAND
,共享信號(hào)處理程序表)。
**簡(jiǎn)化。存在兩個(gè)SYS_fork
和SYS_clone
系統(tǒng)調(diào)用,但在內(nèi)核中,sys_fork
并且sys_clone
它們都是圍繞同一do_fork
函數(shù)的非常薄的包裝器,它本身就是一個(gè)薄的包裝器copy_process
。是的,術(shù)語(yǔ)process
,thread
以及task
相當(dāng)互換使用Linux內(nèi)核...
添加回答
舉報(bào)