協(xié)程

      網(wǎng)友投稿 710 2025-04-03

      由于工作原因調(diào)查了,協(xié)程和線程相關(guān)的知識(shí)

      簡(jiǎn)介:

      協(xié)程更適合于用來(lái)實(shí)現(xiàn)彼此熟悉的程序組件,如合作式多任務(wù),迭代器,無(wú)限列表和管道。 協(xié)程最初在1963年被提出。

      協(xié)程不是進(jìn)程或線程,其執(zhí)行過(guò)程更類似于子例程,或者說(shuō)不帶返回值的函數(shù)調(diào)用。

      一個(gè)程序可以包含多個(gè)協(xié)程,可以對(duì)比與一個(gè)進(jìn)程包含多個(gè)線程,因而下面我們來(lái)比較協(xié)程和線程。我們知道多個(gè)線程相對(duì)獨(dú)立,有自己的上下文,切換受系統(tǒng)控制;而協(xié)程也相對(duì)獨(dú)立,有自己的上下文,但是其切換由自己控制,由當(dāng)前協(xié)程切換到其他協(xié)程由當(dāng)前協(xié)程來(lái)控制。

      知乎:

      一開(kāi)始大家想要同一時(shí)間執(zhí)行那么三五個(gè)程序,大家能一塊跑一跑。特別是UI什么的,別一上計(jì)算量比較大的玩意就跟死機(jī)一樣。于是就有了

      并發(fā)

      ,從程序員的角度可以看成是多個(gè)獨(dú)立的邏輯流。內(nèi)部可以是多cpu并行,也可以是單cpu時(shí)間分片,能快速的切換邏輯流,看起來(lái)像是大家一塊跑的就行。

      但是一塊跑就有問(wèn)題了。我計(jì)算到一半,剛把多次方程解到最后一步,你突然插進(jìn)來(lái),我的中間狀態(tài)咋辦,我用來(lái)儲(chǔ)存的內(nèi)存被你覆蓋了咋辦?所以跑在一個(gè)cpu里面的并發(fā)都需要處理上下文切換的問(wèn)題。

      進(jìn)程

      協(xié)程

      就是這樣抽象出來(lái)個(gè)一個(gè)概念,搭配虛擬內(nèi)存、進(jìn)程表之類的東西,用來(lái)管理獨(dú)立的程序運(yùn)行、切換。

      后來(lái)一電腦上有了好幾個(gè)cpu,好咧,大家都別閑著,一人跑一進(jìn)程。就是所謂的

      并行

      。

      因?yàn)槌绦虻氖褂蒙婕按罅康挠?jì)算機(jī)資源配置,把這活隨意的交給用戶程序,非常容易讓整個(gè)系統(tǒng)分分鐘被搞跪,資源分配也很難做到相對(duì)的公平。所以核心的操作需要陷入內(nèi)核(kernel),切換到操作系統(tǒng),讓老大幫你來(lái)做。

      有的時(shí)候碰著I/O訪問(wèn),阻塞了后面所有的計(jì)算??罩彩强罩?,老大就直接把CPU切換到其他進(jìn)程,讓人家先用著。當(dāng)然除了I\O阻塞,還有時(shí)鐘阻塞等等。一開(kāi)始大家都這樣弄,后來(lái)發(fā)現(xiàn)不成,太慢了。為啥呀,一切換進(jìn)程得反復(fù)進(jìn)入內(nèi)核,置換掉一大堆狀態(tài)。進(jìn)程數(shù)一高,大部分系統(tǒng)資源就被進(jìn)程切換給吃掉了。后來(lái)搞出

      線程

      的概念,大致意思就是,這個(gè)地方阻塞了,但我還有其他地方的邏輯流可以計(jì)算,這些邏輯流是共享一個(gè)地址空間的,不用特別麻煩的切換頁(yè)表、刷新TLB,只要把寄存器刷新一遍就行,能比切換進(jìn)程開(kāi)銷少點(diǎn)。

      如果連時(shí)鐘阻塞、 線程切換這些功能我們都不需要了,自己在進(jìn)程里面寫一個(gè)邏輯流調(diào)度的東西。那么我們即可以利用到并發(fā)優(yōu)勢(shì),又可以避免反復(fù)系統(tǒng)調(diào)用,還有進(jìn)程切換造成的開(kāi)銷,分分鐘給你上幾千個(gè)邏輯流不費(fèi)力。這就是

      用戶態(tài)線程

      從上面可以看到,實(shí)現(xiàn)一個(gè)用戶態(tài)線程有兩個(gè)必須要處理的問(wèn)題:一是碰著阻塞式I\O會(huì)導(dǎo)致整個(gè)進(jìn)程被掛起;二是由于缺乏時(shí)鐘阻塞,進(jìn)程需要自己擁有調(diào)度線程的能力。如果一種實(shí)現(xiàn)使得每個(gè)線程需要自己通過(guò)調(diào)用某個(gè)方法,主動(dòng)交出控制權(quán)。那么我們就稱這種用戶態(tài)線程是協(xié)作式的,即是

      協(xié)程

      。

      摘自:

      https://www.zhihu.com/question/20511233/answer/24260355

      本質(zhì)上協(xié)程就是用戶空間下的線程。用圖來(lái)說(shuō)明一下

      QQ群大佬發(fā)的圖:

      協(xié)程切換由 用戶來(lái)控制,不占用cpu。

      任務(wù)調(diào)度

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:使用Word制作公章的方法(word里如何制作公章)
      下一篇:excel單元格函數(shù)保留小數(shù)點(diǎn)的方法
      相關(guān)文章
      亚洲最新视频在线观看| 亚洲日韩在线观看| 久久久久亚洲精品男人的天堂| 亚洲熟妇无码av另类vr影视| 亚洲欧洲自拍拍偷午夜色| 亚洲影院在线观看| 午夜亚洲AV日韩AV无码大全| 国产亚洲精品岁国产微拍精品| 国产AV无码专区亚洲AV手机麻豆| 久久久久久A亚洲欧洲AV冫| 亚洲一级片内射网站在线观看| 亚洲精品NV久久久久久久久久| 国产成人不卡亚洲精品91| 亚洲AV无码AV男人的天堂不卡| 亚洲欧美日韩中文无线码| 一本色道久久综合亚洲精品蜜桃冫| 亚洲国产精品成人精品小说 | 亚洲AV无码第一区二区三区| 国产亚洲无线码一区二区| 亚洲人成网站在线播放vr| 亚洲人成人网站色www| 亚洲人JIZZ日本人| 亚洲AV无码久久| 亚洲AV天天做在线观看| 亚洲天天在线日亚洲洲精| 精品亚洲成a人片在线观看少妇| 久久精品国产亚洲av麻豆色欲| 亚洲精品自拍视频| 亚洲欧洲日产国码www| 亚洲国产精品线观看不卡| 亚洲国产熟亚洲女视频| 亚洲AV无码成人网站在线观看| 国产精品自拍亚洲| 久久影院亚洲一区| 国产成人亚洲综合色影视| 亚洲AV人人澡人人爽人人夜夜| 97亚洲熟妇自偷自拍另类图片| 亚洲美女aⅴ久久久91| 亚洲欧洲日韩极速播放 | 亚洲色大成网站www永久一区| 亚洲国产精品无码久久一线|