Open tangeping opened 1 year ago
currentTime 只有在advanceClock中更新。假如 timewheel开了很久了,bucket 中没有定时器,新插入一个定时器,addOrRun读到currentTime 是不是直接就过期了?
func (tw *TimingWheel) advanceClock(expiration int64) { currentTime := atomic.LoadInt64(&tw.currentTime) if expiration >= currentTime+tw.tick { currentTime = truncate(expiration, tw.tick) atomic.StoreInt64(&tw.currentTime, currentTime) // Try to advance the clock of the overflow wheel if present overflowWheel := atomic.LoadPointer(&tw.overflowWheel) if overflowWheel != nil { (*TimingWheel)(overflowWheel).advanceClock(currentTime) } } }
@RussellLuo
时间轮的currentTime向前推进,是由DelayQueue中的堆顶元素过期的事件触发的。没有bucket到期就不会更新currentTime。
currentTime 只有在advanceClock中更新。假如 timewheel开了很久了,bucket 中没有定时器,新插入一个定时器,addOrRun读到currentTime 是不是直接就过期了?
@RussellLuo