我很好奇 Go 语言是如何调度 goroutines 的。它是仅在 channel 请求和 I/O 期间切换还是有周期性的协程切换循环?
最佳答案
Go 还没有抢占式调度器,但有一个是 planned for 1.2 .所以不,Go 不会在纯 CPU 计算期间切换上下文,仅在 I/O 期间(如果内存不在寄存器中,则从内存读取也被视为 I/O)。您可以在 Issue 543 - preemptive scheduling 中阅读有关它的一些讨论。 .
关于concurrency - Go 如何决定何时在 goroutine 之间进行上下文切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18545595/