时间轮算法

74 阅读1分钟

起步

时间轮 是一种 实现延迟功能(定时器)的巧妙算法。如果一个系统存在大量的任务调度,时间轮可以高效的利用线程资源来进行批量化调度。把大批量的调度任务全部都绑定时间轮上,通过时间轮进行所有任务的管理,触发以及运行。能够高效地管理各种延时任务,周期任务,通知任务等。

时间轮的精度不是很高。‘精度’决定于时间段指针单元的最小粒度大小。

原理

定时任务的调度:

  • 相对时间
  • 绝对时间

这两个可以互相转换

时间轮是一个存储定时任务的环形队列,底层使用数组实现,数组的每个元素可以存放一个定时任务列表

基本模型

  1. tickMs(基本时间跨度):时间轮由多个时间格组成,每个时间格代表当前时间轮的基本时间调度
  2. wheelSize(时间单位个数)
  3. currentTime(当前所属时间):指针,currentTime 是 tickMs 的整数倍

时间调度

假设一个时间轮不够用,那么再套一轮,第二轮的时间间隔是一整个第一轮的时间。

那么会有一个问题:高层的精度不够,不够就根据剩下的时间来进行时间轮降级