来自不同渠道的数据进入 select 语句可以被忽略吗?
Can data coming from different channels into select statement get ignored?
如果没有在 select 语句中的正确时刻捕获通过 golang 中的通道传入的数据,是否有可能被忽略?
例如,假设有这个 select 语句:
for {
select {
case <-timer.C:
//block A
default:
// block B takes 2 seconds.
}
}
如果计时器在块 B 正在 运行ning 时结束,块 A 是否仍然 运行 在循环的下一次迭代中还是通道的传入数据丢失?
当定时器超时后,它会发送C上的当前时间。如果此时没有人在从C上读取,发送会阻塞,所以它会一直等到接收到值。在这种情况下,它将等到循环的下一次迭代。
通道被设计成一种同步机制,因此它们不需要读者和作者已经同步。
如果没有在 select 语句中的正确时刻捕获通过 golang 中的通道传入的数据,是否有可能被忽略?
例如,假设有这个 select 语句:
for {
select {
case <-timer.C:
//block A
default:
// block B takes 2 seconds.
}
}
如果计时器在块 B 正在 运行ning 时结束,块 A 是否仍然 运行 在循环的下一次迭代中还是通道的传入数据丢失?
当定时器超时后,它会发送C上的当前时间。如果此时没有人在从C上读取,发送会阻塞,所以它会一直等到接收到值。在这种情况下,它将等到循环的下一次迭代。
通道被设计成一种同步机制,因此它们不需要读者和作者已经同步。