时间轮算法概念
Posted 好大的月亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了时间轮算法概念相关的知识,希望对你有一定的参考价值。
概述
在一些中间件中我们经常见到时间轮控制并发和熔断。
那么这个时间轮具体是什么呢,又是怎么使用的呢。
简介
其实时间轮可以简单的理解成我们日常生活中的时钟。
时钟里的指针一直在不停的转动,利用这个我们可以实现定时任务,目前linux里的crontab就是用的时间轮实现的。
我们可以这么想象一下,时间轮就像一个环形链表,当秒针指向1刻度的时候其实就代表过去了1秒的时候,然后在1位置这个元素也是一个链表,从这个链表中取出多个任务去执行,这些被执行的任务就实现了延时1秒执行的需求。
再配个图来展示下
进一步深化理解
上面只是单个时间轮,但是实际中使用的场景会复杂很多,比如要延时一个月,这个时候上面这个单圈的时间轮的刻度就不够用了。
此时可以采用的方法:
1-扩展刻度
2-记录时间轮的圈数,当从指针指向的刻度中取任务时先对所有任务的round --,取出round=0的任务去执行
3-引入层级时间轮,再引入一个月时间轮,一个天时间轮,将任务拆分到上级时间轮中,当上级时间轮的指针取出任务时,如果时间还没到,就降级到下级时间轮,依次类推
上面3中方法中1肯定不采用,太离谱了,如果要扩展1万个刻度,太没效率了。
2和3都是可以采用的,不过3采用的多一点,拆分多个时间轮组合的形式更加灵活
以上是关于时间轮算法概念的主要内容,如果未能解决你的问题,请参考以下文章
算法数据结构专题「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现延时队列的开发实战落地(下)
精华推荐 |算法数据结构专题「延时队列算法」史上非常详细分析和介绍如何通过时间轮(TimingWheel)实现延时队列的原理指南