原創文章,歡迎轉載,轉載請註明出處,謝謝。
0. 前言
前面用了十講介紹了 Go runtime 排程器,這一講結合一些圖在總覽下 Go runtime 排程器。
1. 狀態轉換圖
首先是 Goroutine 的狀態轉換圖:
大部分轉移路徑前面幾講也介紹過,這裡就不繼續介紹了(下同)。
接著是 P 的狀態轉移圖:
最後是執行緒 M 的狀態轉移圖:
(注:上述圖片均來自於公眾號 [碼農桃花源],饒大畫的太好了,直接讓人不想畫了。很好的公眾號,乾貨滿滿,邏輯嚴密,清晰,偶爾還詼諧幽默,推薦哦。)
2. GPM
2.1 GPM 工作流程
直接上圖:
(這個圖來自資深 Gopher 曹大,他的網站在 這裡,推薦哦)
2.2 排程流程
點這裡看 -> 動態演示圖
(這個圖和動畫也來自曹大哈哈)
3. 小結
基本到這裡 Go runtime 排程器精講就介紹差不多了,希望這幾講能讓大家有所收穫,感謝陪伴,再見。
4. 參考資料
- go語言排程器原始碼情景分析
- The Go scheduler
- Go Wiki: Debugging performance issues in Go programs
- goroutine 排程器
- Go 語言高階程式設計