Golang GMP模型分析

478 阅读1分钟

在GMP模型中,内核线程是实际运行goroutine的实体,调度器的作用是把goroutine分配到工作线程上,请深刻理解这句话,对你理解GMP模型有很大的帮助

image.png

learnku.com/articles/41…
juejin.cn/post/688632…

调度器的设计策略

复用线程

1 work stealing机制
当一个M当前没有G可以执行,就去别的M绑定的P偷取G来执行,而不是销毁当前线程
2 hand off 机制
当本线程运行的G发生系统调用的时候,将M与P解绑,把P转移给别的M去执行。系统调用结束以后,尝试把G放到一个P中去执行,如果没找到合适的P,就放到全局队列等待调度

利用并行

抢占调度

抢占式调度有利于充分利用cpu资源

全局G队列

当M执行work stealing时候从P中取不到G,就会从全局队列中取出G执行