您好,登錄后才能下訂單哦!
這篇文章主要介紹“go語言中協(xié)程與線程的區(qū)別有哪些”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強(qiáng),希望這篇“go語言中協(xié)程與線程的區(qū)別有哪些”文章能幫助大家解決問題。
區(qū)別:1、一個線程可以多個協(xié)程,一個進(jìn)程也可以單獨擁有多個協(xié)程;2、線程是同步機(jī)制,而協(xié)程則是異步;3、協(xié)程能保留上一次調(diào)用時的狀態(tài),線程不行;4、線程是搶占式,協(xié)程是非搶占式的;5、線程是被分割的CPU資源,協(xié)程是組織好的代碼流程,協(xié)程需要線程來承載運行。
線程
線程是指進(jìn)程內(nèi)的一個執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實體。線程是進(jìn)程的一個實體,是 CPU 調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨立運行的基本單位。
線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。
線程間通信主要通過共享內(nèi)存,上下文切換很快,資源開銷較少,但相比進(jìn)程不夠穩(wěn)定容易丟失數(shù)據(jù)。
協(xié)程
協(xié)程是一種用戶態(tài)的輕量級線程,協(xié)程的調(diào)度完全由用戶控制。從技術(shù)的角度來說,“協(xié)程就是你可以暫停執(zhí)行的函數(shù)”。協(xié)程擁有自己的寄存器上下文和棧。
協(xié)程調(diào)度切換時,將寄存器上下文和棧保存到其他地方,在切回來的時候,恢復(fù)先前保存的寄存器上下文和棧,直接操作棧則基本沒有內(nèi)核切換的開銷,可以不加鎖的訪問全局變量,所以上下文的切換非???。
協(xié)程與線程的區(qū)別
一個線程可以多個協(xié)程,一個進(jìn)程也可以單獨擁有多個協(xié)程。
線程進(jìn)程都是同步機(jī)制,而協(xié)程則是異步。
協(xié)程能保留上一次調(diào)用時的狀態(tài),每次過程重入時,就相當(dāng)于進(jìn)入上一次調(diào)用的狀態(tài)。
線程是搶占式,而協(xié)程是非搶占式的,所以需要用戶自己釋放使用權(quán)來切換到其他協(xié)程,因此同一時間其實只有一個協(xié)程擁有運行權(quán),相當(dāng)于單線程的能力。
協(xié)程并不是取代線程,而且抽象于線程之上。線程是被分割的 CPU 資源,協(xié)程是組織好的代碼流程,協(xié)程需要線程來承載運行,線程是協(xié)程的資源,但協(xié)程不會直接使用線程,協(xié)程直接利用的是執(zhí)行器(Interceptor),執(zhí)行器可以關(guān)聯(lián)任意線程或線程池,可以使當(dāng)前線程,UI線程或新建新程。
線程是協(xié)程的資源。協(xié)程通過 Interceptor 來間接使用線程這個資源。
關(guān)于“go語言中協(xié)程與線程的區(qū)別有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。