進程,線程,協(xié)程的區(qū)別

1.調(diào)度的基本單位
在傳統(tǒng)的操作系統(tǒng)中,進程是作為獨立調(diào)度和分派的基本單位,每次調(diào)度是需要進行上下文的切換,由于進程有自己的程序段、相關(guān)數(shù)據(jù)段以及進程控制快,所以切換開銷比較大,引入線程的操作系統(tǒng)中,線程是作為單獨調(diào)度和分派的基本單位,線程切換上下文需要切換到內(nèi)核,所以開銷比協(xié)程大點,但是他沒有自己的數(shù)據(jù)段所以比進程開銷小,協(xié)程是屬于用戶級別的線程,它依附于進程或者線程執(zhí)行,所以他不是獨立調(diào)度和分派的基本單位,需要用戶開發(fā)調(diào)度算法,他的切換在用戶態(tài)就能完成
2.并發(fā)性
在引入線程的操作系統(tǒng)中,不僅進程之間可以并發(fā),同一進程的線程也能并發(fā),而協(xié)程是用戶完成調(diào)度的,所以協(xié)程之間只能有一個在運行,其他協(xié)程在等待運行的協(xié)程讓出CPU
3.擁有資源
進程是系統(tǒng)分配資源的基本單位,而線程和協(xié)程并不擁有系統(tǒng)資源,僅有一點必不可少、能保證獨立運行的資源。
4.獨立性
進程擁有自己的內(nèi)存空間,進程和進程之間內(nèi)存空間是獨立的隔離狀態(tài),而進程中線程和協(xié)程除了私有的運行資源外,其他是共享進程的系統(tǒng)資源
5.系統(tǒng)開銷
創(chuàng)建和銷毀進程時,系統(tǒng)都要為之分配和回收進程控制塊、分配或回收其他資源,比如內(nèi)存空間和IO等,開銷大。創(chuàng)建和銷毀線程或協(xié)程時,系統(tǒng)只需要分配或回收線程控制塊,開銷小。在進程切換時需要上下文的切換,而進程所需要的上下文比線程和協(xié)程大很多,切換線程需要切換到內(nèi)核而協(xié)程不需要,所以從切換開銷來看,進程比線程大,線程比協(xié)程大
6.使用場景
當單個進程的內(nèi)存不能滿足應用開銷時可以考慮多進程,在使用多進程時要注意進程之間的通信問題,在需要大量CPU和系統(tǒng)調(diào)用時,在多核系統(tǒng)上可以考慮使用多線程,這樣可以充分利用多核處理任務,在有大量IO操作的應用中可以考慮協(xié)程,因為大部分時間處于等待狀態(tài)為了避免不必要的從用戶切換到內(nèi)核代理的開銷,而且協(xié)程的調(diào)度算法可以用戶自己實現(xiàn),可以更加自己的場景優(yōu)化調(diào)度算法
7.系統(tǒng)相關(guān)性
進程在不同的系統(tǒng)實現(xiàn)方式不一樣,和系統(tǒng)強相關(guān),線程需要在引進線程的操作系統(tǒng)中才能使用,和系統(tǒng)強相關(guān),調(diào)度算法進程和線程都是系統(tǒng)固定的不能用戶自定義,協(xié)程和系統(tǒng)無關(guān),調(diào)度算法也可以用戶自定義

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

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

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