2.12 Go 中哪些动作会触发 runtime 调度? ======================================= goroutine 在遇到哪些情况会触发 runtime 的调度器去调度呢? **第一种:系统调用 SysCall** 当你在 goroutine 进行一些 sleep 休眠、读取磁盘或者发送网络请求时,其实都会发生系统调用,进入操作系统内核。 而一旦发生系统调用,就会直接触发 runtime 的调度,当前的 P 就会去找其他的 M 进行绑定,并取出 G 开始运行。 **第二种:等待锁、通道** 此外,在你的代码中,若因为锁或者通道导致代码阻塞了,也会触发调度。 **第三种:人工触发** 在代码中直接调用 runtime.Gosched 方法,也可以手动触发。 另外说一个小知识,当你执行 fmt.Println 的时候,也会触发调度,这是为什么呢?留给你自己思考咯