線程 、進(jìn)程、協(xié)程 三者區(qū)別

1.并行和并發(fā)

在介紹進(jìn)程、線程和協(xié)程這三個(gè)概念之前,有兩個(gè)操作系統(tǒng)中的相關(guān)概念需要簡(jiǎn)單解釋一下:并行和并發(fā)。
并行:指多個(gè)任務(wù)同時(shí)執(zhí)行。
并發(fā):指在一個(gè)時(shí)間段內(nèi),多個(gè)程序都是在同一個(gè)處理機(jī)上運(yùn)行,但任一個(gè)時(shí)刻點(diǎn)上只有一個(gè)程序在處理機(jī)上運(yùn)行(即多個(gè)任務(wù)在同一處理機(jī)上交替執(zhí)行)。

2. 進(jìn)程: 通俗理解一個(gè)運(yùn)行起來的程序或者軟件叫做進(jìn)程

2.1 每次啟動(dòng)一個(gè)進(jìn)程都需要向操作系統(tǒng)索要運(yùn)行資源,讓進(jìn)程中的線程去執(zhí)行對(duì)應(yīng)的代碼,進(jìn)程是操作系統(tǒng)分配資源的基本單位
2.2 默認(rèn)情況下一個(gè)進(jìn)程只有一個(gè)線程,線程是依附在進(jìn)程里面的, 沒有進(jìn)程就沒有線程, 當(dāng)在進(jìn)程里面還可以創(chuàng)建多個(gè)線程

3.線程:線程的出現(xiàn)是為了減少任務(wù)切換的消耗,提高系統(tǒng)的并發(fā)性,實(shí)現(xiàn)讓一個(gè)進(jìn)程也能執(zhí)行多個(gè)任務(wù)。

3.1 線程(thread)是在進(jìn)程之后發(fā)展出來的概念。線程包含在進(jìn)程中,也叫輕量級(jí)進(jìn)程。線程是進(jìn)程中一個(gè)單一順序的控制流,像“線”一樣(或許是其譯名的由來),它是系統(tǒng)進(jìn)行運(yùn)算調(diào)度(即如何分配CPU去執(zhí)行不同任務(wù))的基本單位,一個(gè)進(jìn)程的多個(gè)線程在執(zhí)行不同任務(wù)的同時(shí)共享進(jìn)程的系統(tǒng)資源(如虛擬地址空間,文件描述符等),如果把進(jìn)程比作一個(gè)正在生產(chǎn)產(chǎn)品的車間,那么線程就好比是車間里面執(zhí)行不同任務(wù)的工人,也可把進(jìn)程比作道路,而線程就好比是并行的車道。線程由相關(guān)堆棧寄存器和線程控制塊組成。

4. 進(jìn)程和線程的對(duì)比

4.1 進(jìn)程是操作系統(tǒng)資源分配的基本單位,每啟動(dòng)一個(gè)進(jìn)程都需要向操作系統(tǒng)索要運(yùn)行資源,默認(rèn)一個(gè)進(jìn)程只有一個(gè)線程,線程是依附在進(jìn)程里面的
4.2 線程是cpu調(diào)度的基本單位, 通過線程去執(zhí)行進(jìn)程中代碼, 線程是執(zhí)行代碼的分支
4.3 多進(jìn)程開發(fā)比單進(jìn)程多線程開發(fā)穩(wěn)定性要強(qiáng),但是多進(jìn)程開發(fā)比多線程開發(fā)資源開銷要大
4.4 多進(jìn)程開發(fā)某個(gè)進(jìn)程死了不會(huì)影響其它進(jìn)程的運(yùn)行,但是多線程開發(fā)該進(jìn)程死了那么這些線程都要進(jìn)行銷毀

優(yōu)點(diǎn):線程切換的開銷比進(jìn)程切換的開銷小,減少了任務(wù)切換的消耗,提高了操作系統(tǒng)的并發(fā)性能。
缺點(diǎn):相比進(jìn)程不夠穩(wěn)定,多線程在操作共享數(shù)據(jù)時(shí)容易出錯(cuò)(比如丟失數(shù)據(jù)、產(chǎn)生死鎖)

5、協(xié)程:用戶態(tài)的輕量級(jí)線程

5.1 什么是協(xié)程

協(xié)程是一種用戶態(tài)的輕量級(jí)線程,又稱"微線程",英文名Coroutine,協(xié)程的調(diào)度完全由用戶控制。人們通常將協(xié)程和子程序(函數(shù))比較著理解。

協(xié)程的特點(diǎn)在于是一個(gè)線程執(zhí)行,與多線程相比,其優(yōu)勢(shì)體現(xiàn)在:

協(xié)程的執(zhí)行效率非常高。因?yàn)樽映绦蚯袚Q不是線程切換,而是由程序自身控制,因此,沒有線程切換的開銷,和多線程比,線程數(shù)量越多,協(xié)程的性能優(yōu)勢(shì)就越明顯,在處理大規(guī)模并發(fā)連接(IO密集型任務(wù))時(shí),協(xié)程要優(yōu)于線程。

協(xié)程不需要多線程的鎖機(jī)制。在協(xié)程中控制共享資源不加鎖,只需要判斷狀態(tài)就好了。

Tips:利用多核CPU最簡(jiǎn)單的方法是多進(jìn)程+協(xié)程,既充分利用多核,又充分發(fā)揮協(xié)程的高效率,可獲得極高的性能。

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

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

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