M执行调度循环时,何时重新执行挂起的G
来源:1-4 Go 程序是怎么跑起来的
虞姬小丸子滴布朗运动
2021-05-18 23:52:19
课上说消费端M执行调度循环时会从绑定P的runq或global runq中获取G,或者执行work stealing。那么问题来了:
1、何时可以重新执行之前挂起现在已经ready的G,重新作为生产者提交吗?
2、还是会创建一个新的M来执行?如果其他P和M都正常绑定执行,何时能再次抢占到P?
3、挂起的G重新ready后会如何分配给P?
1回答
助教_小R
2021-07-22
只要它 ready 了,就会进入三级队列中的一个,另一端就会被 m “消费”到,从而得以执行。
这个问题有点乱,可能没太想清楚。M 是没 P 找 P,有 P 找 G 来执行。
挂起的 G ready 后会先进入三级队列,然后会分配给 M 来执行。就看哪个 M 来取了,没有特定的规律。M 来取的时候肯定是绑定了一个 P 的。
相似问题