为了账号安全,请及时绑定邮箱和手机立即绑定

填充P本地runqueue的Go Scheduler?

填充P本地runqueue的Go Scheduler?

Go
大话西游666 2021-11-08 18:23:52
看看这张来自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).


查看完整回答
反对 回复 2021-11-08
  • 1 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信