← 返回首页

select的执行机制是怎样的?

select的执行机制是随机选择。

如果多个case同时满足条件,Go会随机选择一个执行,这避免了饥饿问题。

如果没有case能执行就会执行default,如果没有default,当前goroutine会阻塞等待。

select {
case data := <-ch1:
    // 处理ch1的数据
case ch2 <- value:
    // 向ch2发送数据  
case <-timeout:
    // 超时处理
default:
    // 所有channel都不可用时执行
}