在学习调度器的时候P和M的关系有疑问。P本身就位于一个线程上吗?如果是,他的工作只是帮助另一个线程M绑定 goroutine吗?
我的理解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