Go runtime 排程器精講(十一):總覽全域性

胡云Troy發表於2024-09-17

原創文章,歡迎轉載,轉載請註明出處,謝謝。


0. 前言

前面用了十講介紹了 Go runtime 排程器,這一講結合一些圖在總覽下 Go runtime 排程器。

1. 狀態轉換圖

首先是 Goroutine 的狀態轉換圖:

image

大部分轉移路徑前面幾講也介紹過,這裡就不繼續介紹了(下同)。

接著是 P 的狀態轉移圖:

image

最後是執行緒 M 的狀態轉移圖:

image

注:上述圖片均來自於公眾號 [碼農桃花源],饒大畫的太好了,直接讓人不想畫了。很好的公眾號,乾貨滿滿,邏輯嚴密,清晰,偶爾還詼諧幽默,推薦哦。

2. GPM

2.1 GPM 工作流程

直接上圖:

image

這個圖來自資深 Gopher 曹大,他的網站在 這裡,推薦哦

2.2 排程流程

image

點這裡看 -> 動態演示圖

這個圖和動畫也來自曹大哈哈

3. 小結

基本到這裡 Go runtime 排程器精講就介紹差不多了,希望這幾講能讓大家有所收穫,感謝陪伴,再見。

4. 參考資料

  • go語言排程器原始碼情景分析
  • The Go scheduler
  • Go Wiki: Debugging performance issues in Go programs
  • goroutine 排程器
  • Go 語言高階程式設計

相關文章