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

九州編程
TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊
所有這些都來自golang.org/src/runtime/proc.go:
函數(shù)schedule(調(diào)度程序)調(diào)用findrunnable試圖G從另一個(gè)P. 如果失敗,它將G從全局運(yùn)行隊(duì)列中返回 a 。這G是然后在“當(dāng)前”執(zhí)行M。
此外,schedule偶爾檢查全局運(yùn)行隊(duì)列“為了公平”:
// 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.
在所有這些中,只涉及一個(gè)鎖,即lock(&sched.lock).
- 1 回答
- 0 關(guān)注
- 223 瀏覽
添加回答
舉報(bào)
0/150
提交
取消