请教一下大家:
+ 1.首先就是 G 在 M 上的时间片用完了,是放回之前的 P 队列,还是全局队列呢
+ 2.GPM 相比 GM 模型,P 的作用是什么
1、这个好像没时间片上的概念吧,就是依次执行P队列的G直到完成,只是有可能G会因IO等阻塞,这种的话会把它放在P队列尾执行下一个G。
2、P可以保留上下文Context,而M是不会记录G的状态的,这样的话G可以跨M执行,如果没有P应该不能正常切换。
不一定对
#1
更多评论
1. 在没有P的GM下,所有G都放在全局队列里,这时如果所有M都去拿G的话,就需要一个全局大锁,性能要下降很多。而引入了P后,每个P有自己的runq,这就解决了大锁互斥的性能问题;
2. 另外一点就是内存问题,GM模型下,内存是M.mcache,当每遇到一个系统调用的时候,就会浪费掉一个M.mcache。引入P后,改为了p.mcache,这样就算系统调用,移走M的话,内存还是在P上,其它G/M还可以使用这块内存;
3. 另外有人说GM还存在goroutine传递问题,暂时未理解这块的说法
#3