TimeWheel
基本思路
时间轮首先是一个“轮”, 即环形数组. 就像手表一样, 用 buckets[]
代表刻度, 以 tick
为单位递进增加时间, 触发对应 bucket
上的任务, 以此无限循环.
每圈时间轮会经过 interval = tickMs * bucketSize
的时间间隔, 对于超过时间间隔的任务, 基本有两种实现方式----多层时间轮和单层复用时间轮.
多层时间轮通过增加上级时间轮的方式来应对 delay
超过 interval
的情况. 下层时间轮每经过一圈, 就将上层时间轮推进一个 tick
. 如果上层时间轮的任务被触发, 就放入到下层时间轮中, 直到在最底层时间轮被触发.