我有一个程序,其中有256个goroutine生成测试数据并将其发送到通道。
在程序的使用部分,我设置了一个如下选择:
select {
case c := <-theChan:
// Do some stuff with c
default:
//
}
令我惊讶的是,虽然256个goroutine不断将项目发送到通道,并且处理这些项目需要时间?该程序多次运行到default
分支中。
我想知道select
语句如何确定theChan
为空并遇到default
。
答案 0 :(得分:0)
这取决于调度程序,但是在您从通道消耗一个值的时间到另一个goroutine获取调度程序分配的执行时间(这会在通道中添加一个值)之间,主goroutine可能有足够的时间要运行案例并返回select
语句,然后再将值添加到通道,则它将运行default
案例。
您可以通过使用缓冲通道来减少这种情况。