何时重新执行阻塞挂起的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 唤醒。


1

Go高级工程师实战营

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

458 学习 · 266 问题

查看课程