Go select如何决定运行到默认分支?

我有一个程序,其中有256个goroutine生成测试数据并将其发送到通道。

在程序的使用部分,我设置了一个如下选择:

select {
case c := <-theChan:
    // Do some stuff with c
default:
    //
}

令我惊讶的是,虽然256个goroutine不断将项目发送到通道,并且处理这些项目需要时间?该程序多次运行到default分支中。

我想知道select语句如何确定theChan为空并遇到default

jrr1234567 回答:Go select如何决定运行到默认分支?

这取决于调度程序,但是在您从通道消耗一个值的时间到另一个goroutine获取调度程序分配的执行时间(这会在通道中添加一个值)之间,主goroutine可能有足够的时间要运行案例并返回select语句,然后再将值添加到通道,则它将运行default案例。

您可以通过使用缓冲通道来减少这种情况。

本文链接:https://www.f2er.com/3168595.html

大家都在问