1、進程
進程是具有一定獨立功能的程序關(guān)于某個??數(shù)據(jù)集??合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位。每個進程都有自己的獨立內(nèi)存空間,不同進程通過進程間通信來通信。由于進程比較重量,占據(jù)獨立的內(nèi)存,所以上下文進程間的切換開銷(棧、寄存器、虛擬內(nèi)存、文件句柄等)比較大,但相對比較穩(wěn)定安全。
2、線程
線程是指進程內(nèi)的一個執(zhí)行單元,也是進程內(nèi)的可調(diào)度實體。線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組??寄存器??和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源。線程間通信主要通過共享內(nèi)存,上下文切換很快,資源開銷較少,但相比進程不夠穩(wěn)定容易丟失數(shù)據(jù)。
3、協(xié)程
協(xié)程是一種用戶態(tài)的輕量級線程,協(xié)程的調(diào)度完全由用戶控制。從技術(shù)的角度來說,“協(xié)程就是你可以暫停執(zhí)行的函數(shù)”。協(xié)程擁有自己的寄存器上下文和棧。協(xié)程調(diào)度切換時,將寄存器上下文和棧保存到其他地方,在切回來的時候,恢復先前保存的寄存器上下文和棧,直接操作棧則基本沒有內(nèi)核切換的開銷,可以不加鎖的訪問全局變量,所以上下文的切換非常快。
線程與進程的區(qū)別:文章來源:http://www.zghlxwxcb.cn/news/detail-670975.html
- 地址空間:線程是進程內(nèi)的一個執(zhí)行單元,進程內(nèi)至少有一個線程,它們共享進程的地址空間,而進程有自己獨立的地址空間
- 資源擁有:進程是資源分配和擁有的單位,同一個進程內(nèi)的線程共享進程的資源
- 線程是處理器調(diào)度的基本單位,但進程不是
- 二者均可并發(fā)執(zhí)行
- 每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口,但是線程不能夠獨立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制
協(xié)程與線程的區(qū)別:文章來源地址http://www.zghlxwxcb.cn/news/detail-670975.html
- 一個線程可以多個協(xié)程,一個進程也可以單獨擁有多個協(xié)程。
- 線程進程都是同步機制,而協(xié)程則是異步。
- 協(xié)程能保留上一次調(diào)用時的狀態(tài),每次過程重入時,就相當于進入上一次調(diào)用的狀態(tài)。
- 線程是搶占式,而協(xié)程是非搶占式的,所以需要用戶自己釋放使用權(quán)來切換到其他協(xié)程,因此同一時間其實只有一個協(xié)程擁有運行權(quán),相當于單線程的能力。
- 協(xié)程并不是取代線程, 而且抽象于線程之上, 線程是被分割的CPU資源, 協(xié)程是組織好的代碼流程, 協(xié)程需要線程來承載運行,
線程是協(xié)程的資源, 但協(xié)程不會直接使用線程, 協(xié)程直接利用的是執(zhí)行器(Interceptor), 執(zhí)行器可以關(guān)聯(lián)任意線程或線程池,
可以使當前線程, UI線程, 或新建新程.。 - 線程是協(xié)程的資源。協(xié)程通過Interceptor來間接使用線程這個資源。
到了這里,關(guān)于進程,線程,協(xié)程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!