看看这张来自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 关注
- 194 浏览
添加回答
举报
0/150
提交
取消