何时重新执行阻塞挂起的G?
来源:1-4 Go 程序是怎么跑起来的
虞姬小丸子滴布朗运动
2021-05-19 00:13:45
M执行调度循环的时候,何时会去执行之前阻塞挂起但现在已经ready的G?
1回答
Xargin
2021-05-19
M 不管这个,是由对称的操作方的 goroutine 去管理的,举个例子:
如果你的 g 阻塞在 channel send,那么他就进了 sendq,当前这个 M 就不管这个 g 了,之后 channel 有 recv 的 goroutine 执行 channel recv 操作的时候,会检查 channel 的 sendq 上是不是有被阻塞住的 g,由这个 recv 方把原来阻塞的 g 唤醒。
其它结构也是同理,如果是 Lock 阻塞的,那就由执行 Unlock 的 goroutine 把原来阻塞在锁上的 goroutine 唤醒。
相似问题