else if t.expiration < tw.currentTime+tw.interval {
// Put it into its own bucket
virtualID := t.expiration / tw.tick
b := tw.buckets[virtualID%tw.wheelSize]
b.Add(t)
// Set the bucket expiration time
if b.SetExpiration(virtualID * tw.tick) {
tw.queue.Offer(b)
}
return true
}
the timingwheel add() 方法中:
求VirtualID应该是irtualID := (t.expiration - tw.currentTime +1) / tw.tick ,b.SetExpiration(virtualID tw.tick) 应该是b.SetExpiration(tw.currentTime + virtualID tw.tick)
advanceClock()中传入的是bucket. Expiration(),按照现在的逻辑bucket. Expiration()=virtualID * tw.tick,advanceClock()方法中的if语句应该是不会成立的。