select 忽略慢速大小写?
select ignored slow case?
我在多个案例中使用了这样的 select
:
for {
select {
case data:= <- highFreqChan:
// do something:
case <- time.After(time.Second * 5):
// send some heartbeat like data...
}
}
我发现,如果highFreqChan
数据量很大,heartbeat case不会进入,当停止向highFreqChan
发送数据时,heartbeat case又活了,如何让它一直进入highFreqChan
还在工作时的心跳情况?
您是 运行 time.After
作为 select 条件的一部分,这意味着它在达到 select 时被评估...这意味着它将在 达到 select 后 5 秒 过期。因此,如果 highFreqChan
连续 5 秒没有任何数据,您只会进入这种情况。
如果您想每 5 秒做一些事情,请改用time.Ticker,如下所示:
heartbeat := time.NewTicker(5 * time.Second)
defer heartbeat.Stop()
for {
select {
case data:= <- highFreqChan:
// do something:
case <- heartbeat.C:
// send some heartbeat like data...
}
}
我在多个案例中使用了这样的 select
:
for {
select {
case data:= <- highFreqChan:
// do something:
case <- time.After(time.Second * 5):
// send some heartbeat like data...
}
}
我发现,如果highFreqChan
数据量很大,heartbeat case不会进入,当停止向highFreqChan
发送数据时,heartbeat case又活了,如何让它一直进入highFreqChan
还在工作时的心跳情况?
您是 运行 time.After
作为 select 条件的一部分,这意味着它在达到 select 时被评估...这意味着它将在 达到 select 后 5 秒 过期。因此,如果 highFreqChan
连续 5 秒没有任何数据,您只会进入这种情况。
如果您想每 5 秒做一些事情,请改用time.Ticker,如下所示:
heartbeat := time.NewTicker(5 * time.Second)
defer heartbeat.Stop()
for {
select {
case data:= <- highFreqChan:
// do something:
case <- heartbeat.C:
// send some heartbeat like data...
}
}