《Go題庫·5》Go的GMP模型?

面試企業(yè) 深信服棋恼,百度斤彼,小米,嗶哩嗶哩蘸泻,好未來琉苇,跟誰學(xué),學(xué)而思悦施,網(wǎng)易并扇,騰訊,知乎抡诞,高德穷蛹,字節(jié),昼汗,新浪肴熏,蝦皮,Aibee顷窒。

題目解析 GOLANG ROADMAP社區(qū)

答案(溪尾)

G是Goroutine的縮寫蛙吏,相當(dāng)于操作系統(tǒng)的進程控制塊(process control block)源哩。它包含:函數(shù)執(zhí)行的指令和參數(shù),任務(wù)對象鸦做,線程上下文切換励烦,字段保護,和字段的寄存器泼诱。

M是一個線程坛掠,每個M都有一個線程的棧。如果沒有給線程的棧分配內(nèi)存治筒,操作系統(tǒng)會給線程的棧分配默認(rèn)的內(nèi)存屉栓。當(dāng)線程的棧制定,M.stack->G.stack, M的PC寄存器會執(zhí)行G提供的函數(shù)耸袜。

P(處理器友多,Processor)是一個抽象的概念,不是物理上的CPU句灌。當(dāng)一個P有任務(wù)夷陋,需要創(chuàng)建或者喚醒一個系統(tǒng)線程去處理它隊列中的任務(wù)欠拾。P決定同時執(zhí)行的任務(wù)的數(shù)量胰锌,GOMAXPROCS限制系統(tǒng)線程執(zhí)行用戶層面的任務(wù)的數(shù)量。

GO調(diào)度器的調(diào)度過程藐窄,首先創(chuàng)建一個G對象资昧,然后G被保存在P的本地隊列或者全局隊列(global queue)。這時P會喚醒一個M荆忍。P按照它的執(zhí)行順序繼續(xù)執(zhí)行任務(wù)格带。M尋找一個空閑的P,如果找得到刹枉,將G與自己綁定叽唱。然后M執(zhí)行一個調(diào)度循環(huán):調(diào)用G對象->執(zhí)行->清理線程->繼續(xù)尋找Goroutine。

在M的執(zhí)行過程中微宝,上下文切換隨時發(fā)生棺亭。當(dāng)切換發(fā)生,任務(wù)的執(zhí)行現(xiàn)場需要被保護蟋软,這樣在下一次調(diào)度執(zhí)行可以進行現(xiàn)場恢復(fù)镶摘。M的棧保存在G對象中,只有現(xiàn)場恢復(fù)需要的寄存器(SP,PC等)岳守,需要被保存到G對象凄敢。

如果G對象還沒有被執(zhí)行,M可以將G重新放到P的調(diào)度隊列湿痢,等待下一次的調(diào)度執(zhí)行涝缝。當(dāng)調(diào)度執(zhí)行時,M可以通過G的vdsoSP, vdsoPC 寄存器進行現(xiàn)場恢復(fù)。

P隊列 P有2種類型的隊列:

  • 本地隊列:本地的隊列是無鎖的俊卤,沒有數(shù)據(jù)競爭問題嫩挤,處理速度比較高。

  • 全局隊列:是用來平衡不同的P的任務(wù)數(shù)量消恍,所有的M共享P的全局隊列岂昭。

線程清理 G的調(diào)度是為了實現(xiàn)P/M的綁定,所以線程清理就是釋放P上的G狠怨,讓其他的G能夠被調(diào)度约啊。

  • 主動釋放(active release):典型的例子是,執(zhí)行G任務(wù)時佣赖,發(fā)生了系統(tǒng)調(diào)用(system call)恰矩,這時M會處于阻塞(Block)狀態(tài)。調(diào)度器會設(shè)置一個超時時間憎蛤,來釋放P外傅。

  • 被動釋放(passive release):如果系統(tǒng)調(diào)用發(fā)生,監(jiān)控程序需要掃描處于阻塞狀態(tài)的P/M俩檬。 這時萎胰,超時之后,P資源會回收棚辽,程序被安排給隊列中的其他G任務(wù)技竟。

本文由 GOLANG ROADMAP 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屈藐,一起剝皮案震驚了整個濱河市榔组,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌联逻,老刑警劉巖搓扯,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異包归,居然都是意外死亡锨推,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門箫踩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爱态,“玉大人,你說我怎么就攤上這事境钟〗醯#” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵慨削,是天一觀的道長洞渔。 經(jīng)常有香客問我套媚,道長,這世上最難降的妖魔是什么磁椒? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任堤瘤,我火速辦了婚禮,結(jié)果婚禮上浆熔,老公的妹妹穿的比我還像新娘本辐。我一直安慰自己,他們只是感情好医增,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布慎皱。 她就那樣靜靜地躺著,像睡著了一般叶骨。 火紅的嫁衣襯著肌膚如雪茫多。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天忽刽,我揣著相機與錄音天揖,去河邊找鬼。 笑死跪帝,一個胖子當(dāng)著我的面吹牛今膊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播歉甚,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼万细,長吁一口氣:“原來是場噩夢啊……” “哼扑眉!你這毒婦竟也來了纸泄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腰素,失蹤者是張志新(化名)和其女友劉穎聘裁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弓千,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡衡便,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了洋访。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镣陕。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖姻政,靈堂內(nèi)的尸體忽然破棺而出呆抑,到底是詐尸還是另有隱情,我是刑警寧澤汁展,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布鹊碍,位于F島的核電站厌殉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏侈咕。R本人自食惡果不足惜公罕,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耀销。 院中可真熱鬧楼眷,春花似錦、人聲如沸熊尉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帽揪。三九已至硝清,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間转晰,已是汗流浹背芦拿。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留查邢,地道東北人蔗崎。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像扰藕,于是被迫代替她去往敵國和親缓苛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 前言 隨著服務(wù)器硬件迭代升級邓深,配置也越來越高未桥。為充分利用服務(wù)器資源,并發(fā)編程也變的越來越重要芥备。在開始之前冬耿,需要了解...
    羋學(xué)僧閱讀 288評論 0 0
  • 進程亦镶、線程、協(xié)程 進程:進程是系統(tǒng)進行資源分配的基本單位袱瓮,有獨立的內(nèi)存空間缤骨,單切換代價極高,進程間通信也比較麻煩 ...
    GGBond_8488閱讀 2,186評論 0 5
  • 進程、線程褐望、協(xié)程 進程:進程是系統(tǒng)進行資源分配的基本單位勒庄,有獨立的內(nèi)存空間串前,單切換代價極高,進程間通信也比較麻煩 ...
    gurlan閱讀 635評論 0 0
  • 簡述 G — 表示 Goroutine实蔽,它是一個待執(zhí)行的任務(wù); M — 表示操作系統(tǒng)的線程荡碾,它由操作系統(tǒng)的調(diào)度器調(diào)...
    kyo1992閱讀 1,186評論 0 0
  • 說起go語言,離不開goroutine局装。之前使用go語言開發(fā)的時候坛吁,也沒多少機會用到goroutine。趁這些天了...
    李明燮閱讀 1,035評論 0 0