Go语言调度器 P 每个都绑定在一个线程上

chenguifeng · · 1135 次点击
你好,微信群已经过期了,无法加入。
#2
更多评论
我的理解P一开始不属于任何一个M,P是逻辑cpu它和M绑定了,那么它就能真正的执行指令了,因为M就是系统线程。P也可以和M解绑,比如进程进入系统调用比较久,P就会和M解绑,让M等待系统调用,而P就去另寻新欢了,也就是找一个新的M2来和P绑定,继续执行执行P上面的G。 问题的回答:P本身不一定位于一个线程M上,P与M的关系是M:N的关系。我觉得P最关键的作用是存着G的队列和本地缓存。 有兴趣可以自己runtime源码: 加深理解 https://github.com/sheepbao/golang_runtime_reading 欢迎star和加入群
#1
![image.png](https://static.studygolang.com/190114/a9ebec7cee10491878c5c4ea65b66c61.png) 直接加我微信,我拉你
#3