進程(process),線程(thread) 悬蔽,邏輯調度器(logical processor)扯躺,goroutine,runtime scheduler

基礎: 進程與線程

  • 進程(process):操作系統(tǒng)資源分配的最小單元,資源管理角色:
    • Memory: 代碼录语,數(shù)據(jù)
    • Handles: files倍啥, devices, OS
    • Threads: 主線程钦无,和其他線程逗栽,執(zhí)行代碼
  • 線程(thread):是CPU執(zhí)行的最小單元
  • OS scheduler:調度線程,決定哪些線程分配到CPU時間片

圖示:


image.png

go

  • Go runtime scheduler: 創(chuàng)建和管理所有的goroutine失暂,綁定系統(tǒng)線程到logical processor彼宠,調度goroutine 到logical processor執(zhí)行,包含一個goroutine全局待調度隊列弟塞。
  • logical processor: 每個logical processor 綁定到一個線程上凭峡,包含一個goroutine執(zhí)行隊列,調度執(zhí)行goroutine
  • thread:一個thread用來執(zhí)行多個goroutine决记,在不同的時間
  • goroutine:go里面的異步執(zhí)行函數(shù)摧冀, 比thread占用更少資源,更容易被調度執(zhí)行
  • go弱化了thread概念系宫,讓logical processor來調度thread執(zhí)行索昂。

goroutine 調度過程

  1. goroutine 創(chuàng)建,放置在go runtime scheduler 的全局隊列扩借,等待被調度
  2. runtime scheduler 調度goroutine 到一個logical processor 椒惨,添加到logical processor 的執(zhí)行隊列,等待logical processor 調度
  3. 當正在執(zhí)行的goroutine 執(zhí)行一些阻塞調用潮罪,該thread與goroutine從logical processor解除關聯(lián)康谆,阻塞的goroutine等待阻塞調用返回
  4. 解除thread關聯(lián)時,logical processor 沒有一個可以調度的thread嫉到。所以logical processor重新創(chuàng)建一個線程關聯(lián)到logical processor沃暗,繼續(xù)調度自己的執(zhí)行隊列
  5. 當阻塞調用返回時,goroutine 返回到logical processor 的執(zhí)行隊列等待被調度何恶;空閑的thread資源保留孽锥,等待將來被使用。

圖示:

image.png

Concurrency vs parallelism

Parallelism(并行):

  • Parallelism can only be achieved when multiple pieces of code are executing simultaneously against different physical processors. 并行執(zhí)行导而,利用多核處理器的物理資源忱叭,并行執(zhí)行代碼
  • Parallelism is about doing a lot of things at once. 在現(xiàn)一時間同時做多個事情

Concurrency(并發(fā)):

  • Concurrency is about managing a lot of things at once。在同樣的時間內管理執(zhí)行多個事情
  • 在大多數(shù)情況下今艺,并發(fā)的性能大于并行韵丑,因為操作系統(tǒng)和物理硬件的壓力更小,允許系統(tǒng)做更多的事情

圖示:

image.png

疑問虚缎?

go弱化了thread概念撵彻,讓logical processor來調度thread執(zhí)行钓株。go runtime 是否在維護一個線程池,讓logical processor 調度使用陌僵?

  • 目前go默認可以使用10000個線程轴合,可以通過SetMaxThreads設置
  • 《go in action 》 第六章里有提到因為系統(tǒng)調用返回的goroutine,會放到logical processor的調度隊列里碗短;與之關聯(lián)的線程受葛,會放置到后續(xù)使用

基于以上兩點,猜測確實有維護一個線程池偎谁。目前還沒找到相關文檔总滩,關乎這方面底層的介紹

參考文檔:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市巡雨,隨后出現(xiàn)的幾起案子闰渔,更是在濱河造成了極大的恐慌,老刑警劉巖铐望,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冈涧,死亡現(xiàn)場離奇詭異,居然都是意外死亡正蛙,警方通過查閱死者的電腦和手機督弓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乒验,“玉大人咽筋,你說我怎么就攤上這事』布” “怎么了?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵蒜危,是天一觀的道長虱痕。 經(jīng)常有香客問我,道長辐赞,這世上最難降的妖魔是什么部翘? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮响委,結果婚禮上新思,老公的妹妹穿的比我還像新娘。我一直安慰自己赘风,他們只是感情好夹囚,可當我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著邀窃,像睡著了一般荸哟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天鞍历,我揣著相機與錄音舵抹,去河邊找鬼。 笑死劣砍,一個胖子當著我的面吹牛惧蛹,可吹牛的內容都是我干的。 我是一名探鬼主播刑枝,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼香嗓,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仅讽?” 一聲冷哼從身側響起陶缺,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洁灵,沒想到半個月后饱岸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡徽千,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年苫费,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片双抽。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡百框,死狀恐怖,靈堂內的尸體忽然破棺而出牍汹,到底是詐尸還是另有隱情铐维,我是刑警寧澤,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布慎菲,位于F島的核電站嫁蛇,受9級特大地震影響,放射性物質發(fā)生泄漏露该。R本人自食惡果不足惜睬棚,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望解幼。 院中可真熱鬧抑党,春花似錦、人聲如沸撵摆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽台汇。三九已至苛骨,卻和暖如春篱瞎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背痒芝。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工俐筋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人严衬。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓澄者,卻偏偏與公主長得像,于是被迫代替她去往敵國和親请琳。 傳聞我的和親對象是個殘疾皇子粱挡,可洞房花燭夜當晚...
    茶點故事閱讀 45,675評論 2 359