WheelTimer Algorithm Demo

Hashed Hierarchical Wheel Timer · esrrhs/wheel_timer (Folly HHWheelTimer–inspired)

expireTick_ 0
Next slot (L0) 0
Active timers 0
Next ID 0
Layer 0 (fastest) Layer 1 Layer 2 Layer 3 (slowest) Cursor Fire / expire

Insert

diff < 8 → L0; < 64 → L1; < 512 → L2; else L3

Trigger

Update: process buckets_[0][idx]; Cascade first on wrap

Delete

Demo

Operation log

① Insert

delay → end_tick; pick layer by diff; slot = (end_tick ≫ bits×layer) & mask; write buckets_ and timer_map_.

② Trigger

Update advances expireTick_; pop all timers in the current layer-0 slot and return their IDs.

③ Cascade

When layer-0 pointer idx==0, take timers from the matching higher-layer slot and re-AddImpl (demote to a lower layer).

④ Delete

Look up id in timer_map_, swap-remove from the bucket vector, then erase the map entry.