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

  1. 只要它 ready 了,就会进入三级队列中的一个,另一端就会被 m “消费”到,从而得以执行。

  2. 这个问题有点乱,可能没太想清楚。M 是没 P 找 P,有 P 找 G 来执行。

  3. 挂起的 G ready 后会先进入三级队列,然后会分配给 M 来执行。就看哪个 M 来取了,没有特定的规律。M 来取的时候肯定是绑定了一个 P 的。

0

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程