線程模型以及goroutine協(xié)程的實(shí)現(xiàn)方式

一菜循、線程模型

1.1? 內(nèi)核級(jí)線程模型

每個(gè)線程由內(nèi)核調(diào)度器獨(dú)立的調(diào)度,所以如果一個(gè)線程阻塞則不影響其他的線程。

優(yōu)點(diǎn):在多核處理器的硬件的支持下涮母,內(nèi)核空間線程模型支持了真正的并行配深,當(dāng)一個(gè)線程被阻塞后携添,允許另一個(gè)線程繼續(xù)執(zhí)行,所以并發(fā)能力較強(qiáng)篓叶。

缺點(diǎn):每創(chuàng)建一個(gè)用戶級(jí)線程都需要?jiǎng)?chuàng)建一個(gè)內(nèi)核級(jí)線程與其對應(yīng)烈掠,這樣創(chuàng)建線程的開銷比較大,會(huì)影響到應(yīng)用程序的性能澜共。


1.2 用戶級(jí)線程模型


優(yōu)點(diǎn): 這種模型的好處是線程上下文切換都發(fā)生在用戶空間向叉,避免的模態(tài)切換(mode switch),從而對于性能有積極的影響嗦董。

缺點(diǎn):所有的線程基于一個(gè)內(nèi)核調(diào)度實(shí)體即內(nèi)核線程母谎,這意味著只有一個(gè)處理器可以被利用,在多處理器環(huán)境下這是不能夠被接受的京革,本質(zhì)上奇唤,用戶線程只解決了并發(fā)問題幸斥,但是沒有解決并行問題。如果線程因?yàn)?I/O 操作陷入了內(nèi)核態(tài)咬扇,內(nèi)核態(tài)線程阻塞等待 I/O 數(shù)據(jù)甲葬,則所有的線程都將會(huì)被阻塞,用戶空間也可以使用非阻塞而 I/O懈贺,但是不能避免性能及復(fù)雜度問題经窖。

1.3 兩級(jí)線程模型

>

二、Go并發(fā)調(diào)度: G-P-M模型


在操作系統(tǒng)提供的內(nèi)核線程之上梭灿,Go搭建了一個(gè)特有的兩級(jí)線程模型画侣。goroutine機(jī)制實(shí)現(xiàn)了M : N的線程模型,goroutine機(jī)制是協(xié)程(coroutine)的一種實(shí)現(xiàn)堡妒,golang內(nèi)置的調(diào)度器配乱,可以讓多核CPU中每個(gè)CPU執(zhí)行一個(gè)協(xié)程。

Go語言中支撐整個(gè)scheduler實(shí)現(xiàn)的主要有4個(gè)重要結(jié)構(gòu)皮迟,分別是M搬泥、G、P伏尼、Sched忿檩, 前三個(gè)定義在runtime.h中,Sched定義在proc.c中烦粒。

? Sched結(jié)構(gòu)就是調(diào)度器休溶,它維護(hù)有存儲(chǔ)M和G的隊(duì)列以及調(diào)度器的一些狀態(tài)信息等。

? M結(jié)構(gòu)是Machine扰她,系統(tǒng)線程兽掰,它由操作系統(tǒng)管理的,goroutine就是跑在M之上的徒役;M是一個(gè)很大的結(jié)構(gòu)孽尽,里面維護(hù)小對象內(nèi)存cache(mcache)、當(dāng)前執(zhí)行的goroutine忧勿、隨機(jī)數(shù)發(fā)生器等等非常多的信息杉女。

? P結(jié)構(gòu)是Processor,處理器鸳吸,它的主要用途就是用來執(zhí)行g(shù)oroutine的熏挎,它維護(hù)了一個(gè)goroutine隊(duì)列,即runqueue晌砾。Processor是讓我們從N:1調(diào)度到M:N調(diào)度的重要部分坎拐。

? G是goroutine實(shí)現(xiàn)的核心結(jié)構(gòu),它包含了棧,指令指針哼勇,以及其他對調(diào)度goroutine很重要的信息都伪,例如其阻塞的channel。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末积担,一起剝皮案震驚了整個(gè)濱河市陨晶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌帝璧,老刑警劉巖先誉,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異聋溜,居然都是意外死亡谆膳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門撮躁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人买雾,你說我怎么就攤上這事把曼。” “怎么了漓穿?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵嗤军,是天一觀的道長。 經(jīng)常有香客問我晃危,道長叙赚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任僚饭,我火速辦了婚禮震叮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鳍鸵。我一直安慰自己苇瓣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布偿乖。 她就那樣靜靜地躺著击罪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贪薪。 梳的紋絲不亂的頭發(fā)上媳禁,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音画切,去河邊找鬼竣稽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丧枪。 我是一名探鬼主播光涂,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拧烦!你這毒婦竟也來了忘闻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤恋博,失蹤者是張志新(化名)和其女友劉穎齐佳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體债沮,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炼吴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了疫衩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硅蹦。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闷煤,靈堂內(nèi)的尸體忽然破棺而出童芹,到底是詐尸還是另有隱情,我是刑警寧澤鲤拿,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布假褪,位于F島的核電站,受9級(jí)特大地震影響近顷,放射性物質(zhì)發(fā)生泄漏生音。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一窒升、第九天 我趴在偏房一處隱蔽的房頂上張望缀遍。 院中可真熱鬧,春花似錦异剥、人聲如沸瑟由。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歹苦。三九已至,卻和暖如春督怜,著一層夾襖步出監(jiān)牢的瞬間殴瘦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工号杠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蚪腋,地道東北人丰歌。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像屉凯,于是被迫代替她去往敵國和親立帖。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容