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