Skip to content

G-P-M调度模型

  • G:Goroutine,Go协程
  • P:Processor,逻辑处理器
  • M:Machine,操作系统线程

调度流程

  1. 但有可以运行的M时,会获取一个可用的P,如果所有的P都被占用,则当前M进入休眠,或进入一段时间的自旋
  2. P 优先从本地队列中获得 G;如果本地队列为空,则尝试从全局队列中获得 G;如果依旧为空,则尝试从其他的P的本地队列中拉取一般的 G 下来。
  3. M 执行分配到的 G,一直持续到
    1. G 自愿让出(如Goshel
    2. G 被阻塞
    3. G 被调度器抢占
  4. 阻塞或抢占的 G 会放回本地或全局队列,等待下一次就绪;执行完毕的 G 会被释放资源

一些细节

P 队列

  • 创建 G 的时候,优先插入 P 的本地队列
  • 如果 P 的本地队列满了,则分一半到全局队列

Released under the MIT License.