Concurrency Go如何决定何时在Goroutine之间切换上下文?

Concurrency Go如何决定何时在Goroutine之间切换上下文?,concurrency,go,goroutine,Concurrency,Go,Goroutine,我很好奇围棋语言是如何安排goroutines的。它是否仅在通道请求和I/O期间切换,还是具有周期性的协同路由切换循环?Go还没有抢占式调度程序,但有一个是。因此,不,Go在仅CPU计算期间,仅在I/O期间,不会切换上下文(如果从内存读取的内容还不在寄存器中,则也将其视为I/O)。您可以在中阅读一些关于它的讨论。如果我理解正确,将这些链接中描述的内容称为“抢占式调度”太牵强了。这并不是真正的先发制人,只是在程序员看不见的情况下,收益率被放在了更多的地方。当然,这使程序更“并发”,但它仍然是协作的

我很好奇围棋语言是如何安排goroutines的。它是否仅在通道请求和I/O期间切换,还是具有周期性的协同路由切换循环?

Go还没有抢占式调度程序,但有一个是。因此,不,Go在仅CPU计算期间,仅在I/O期间,不会切换上下文(如果从内存读取的内容还不在寄存器中,则也将其视为I/O)。您可以在中阅读一些关于它的讨论。

如果我理解正确,将这些链接中描述的内容称为“抢占式调度”太牵强了。这并不是真正的先发制人,只是在程序员看不见的情况下,收益率被放在了更多的地方。当然,这使程序更“并发”,但它仍然是协作的。我认为如果不使用特殊的虚拟机(如Erlang)或直接操作系统支持(操作系统线程),就不可能进行抢占式多任务处理。请更新您的答案好吗?我听说Go能够在函数调用时抢先一段时间,但我不确定。