線程與進程的區(qū)別

雖然這是一個小問題,但很多人并沒有說清楚。要了解這個就要明白它們出現(xiàn)的歷史。

如果操作系統(tǒng)同一時間只執(zhí)行一個程序,那么當這個程序進行IO操作等耗時事件時,CPU是空閑的,所以引入了進程,操作系統(tǒng)讓CPU可以同時處理多個程序,當一個進程阻塞,可以切換去執(zhí)行另外的進程,從而充分利用。

這個時候一個進程代表一部分資源和一個任務(wù)。在任務(wù)切換的時候,資源就要跟隨切換,包括cpu的狀態(tài)、寄存器的數(shù)據(jù)、地址空間等,當進程東西越來越多,這樣的資源切換就會耗費巨大。

這個時候引入了線程,就是依然按進程分配資源,但是按線程分配任務(wù)。這就是所謂的“進程是資源分配的最小單位,線程是CPU調(diào)度的最小單位”。這時任務(wù)切換,如果還在一個進程里,那么資源就不需要切換,消耗就減少了。而且很多時候都是在一段時間內(nèi)一直用一個進程,有這樣的“局部性”的特性在。

這就是它們的主要區(qū)別:它們出現(xiàn)的原因不同,解決的問題不同。進程是為了并發(fā)執(zhí)行任務(wù)而來,線程是為了更輕量的、更高效的執(zhí)行多任務(wù)而來。

多說一句:虛擬內(nèi)存機制的設(shè)計,使得在進程的世界里,它擁有所有的內(nèi)存,它的眼里是沒有其他進程的。每個進程之間就像是平行世界,他們各自獨立存在。而線程是共享內(nèi)存的,在A線程里的地址0x12345678跟B線程的0x12345678是同一個東西,這樣才有了合作和資源競爭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容