golang-design/under-the-hood

ch06sched/basic: “P 的结构” 介绍是否有误?

cnbailian opened this issue · 1 comments

动机

《6.1 基本知识》中 “P 的结构” 介绍与后面《6.3 调度循环》中对于调度的描述不符

需求说明

“P 的结构”:

当引入了 P 之后,P 持有 G 的本地队列,而持有 P 的 M 执行完 G 后在 P 本地队列中没有发现其他 G 可以执行时, 会从其他的 P 的本地队列偷取(steal)一个 G 来执行,只有在所有的 P 都偷不到的情况下才去全局队列里面取。

findrunnable 流程部分引用:

尝试从本地队列中取 g,如果取到,则直接返回,否则继续从全局队列中找 g,如果找到则直接返回;
检查是否存在 poll 网络的 g,如果有,则直接返回;
如果此时仍然无法找到 g,则从其他 P 的本地队列中偷取;

所以调度流程优先级应该是 本地 > 全局 > steal 吧,还是说有其他我没有注意到的地方

你好,你的疑惑是正确的,非常感谢指出这种低级错误 Orz