看看這張來自morsmachine.dk/go-scheduler 的著名圖片灰名單是P 的本地運行隊列。如果這個隊列變空,它們將被來自全局運行隊列的go 程序填充。問題是,誰來填充P的本地運行隊列?調度程序,沒有同步還是每個P自己做(互斥鎖)?PS 文章省略了這個信息。
1 回答

九州編程
TA貢獻1785條經驗 獲得超4個贊
所有這些都來自golang.org/src/runtime/proc.go:
函數schedule(調度程序)調用findrunnable試圖G從另一個P. 如果失敗,它將G從全局運行隊列中返回 a 。這G是然后在“當前”執行M。
此外,schedule偶爾檢查全局運行隊列“為了公平”:
// Check the global runnable queue once in a while to ensure fairness.
// Otherwise two goroutines can completely occupy the local runqueue
// by constantly respawning each other.
在所有這些中,只涉及一個鎖,即lock(&sched.lock).
- 1 回答
- 0 關注
- 226 瀏覽
添加回答
舉報
0/150
提交
取消