时间轮(TimingWheel)算法总结

时间轮算法在操作系统定时任务调度、Quartz等框架中广泛应用。通过时间轮,可以高效管理大量延迟任务,但精度受限于时间轮最小单元。文章介绍了时间轮的实现,包括简单单时间轮、改进版单时间轮和多时间轮,分析了它们的优缺点和适用场景。
摘要由CSDN通过智能技术生成

通过阅读篇文章您可以很容易理解平时所使用的开源框架是如何进行任务调度的。而且对于以后业务上碰到需要做时间任务调度的需求,也可以尝试着用实践论算法去实现。


一、时间轮的应用

其实早在1987年,时间轮算法的论文已经发布。论文名称:Hashed and Hierarchical Timing Wheels,公众号回复:TimingWheel,获取PDF版本。

时间轮(TimingWheel)算法应用范围非常广泛,各种操作系统的定时任务调度都有用到,我们熟悉的linux crontab,以及Java开发过程中常用的Dubbo、Netty、Akka、Quartz、ZooKeeper 、Kafka等,几乎所有和时间任务调度都采用了时间轮的思想。

二、时间轮算法的作用

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

不过,时间轮调度器的时间精度可能不是很高,对于精度要求特别高的调度任务可能不太适合,后面我们会分享linux高精度任务调度的实现。因为时间轮算法的精度取决于时间段“指针”单元的最小粒度大小,比如时间轮的格子是一秒跳一次,那么调度精度小于一秒的任务就无法被时间轮所调度。

三、时间轮的实现
3.1 如何实现定时任务调度

定时的任务调度分两种:

  • 一段时间后执行,即:相对时间

  • 指定某个确定的时间执行,即:绝对时间

当然,这两者之间是可以相互转换的,例如当前时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值