一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种处理延时任务的方法及装置与流程

2022-04-09 05:39:31 来源:中国专利 TAG:

技术特征:
1.一种处理延时任务的方法,其特征在于,采用多层的时间轮,一层时间轮底层数据结构为一个环形数组,数组中每个位置代表时间轮中的一个槽,所述槽用于存放延时任务;所述时间轮还包括一个时间指针,时间指针指向时间轮中的槽,随着时间推移,时间指针按照一定时间周期沿着时间轮不断移动,当时间指针指向某个槽时,说明该槽内延时任务已过期,需要取出延时任务执行;所述多层时间轮呈钟表式分布,内层时间轮转动一周,外层时间轮转动一格,所述时间轮依次向外扩展,进而增大时间轮跨度。2.根据权利要求1所述的一种处理延时任务的方法,其特征在于,所述时间轮槽对象为bucket,内部维护过期时间属性和双向链表tasklist,双向链表tasklist用于存放延时任务,过期时间属性初始值为-1。3.根据权利要求2所述的一种处理延时任务的方法,其特征在于,所述时间轮的时间粒度使用tickms表示,代表时间轮转动一格槽需要经过的时间,所述时间轮的大小使用wheelsize表示,即单层时间轮的环形数组长度;wheelsize设置为2的指数幂,若延时任务过期时间为expiredtime,则延时任务所处时间轮中槽的下标计算公式如下:index=(expiredtime/tickms)&(wheelsize-1)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(1)其中,index为延时任务所处时间轮中槽的下标。interval:时间轮跨度,计算方式如下:interval=tickms
×
wheelsize
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(2)4.根据权利要求3所述的一种处理延时任务的方法,其特征在于,当前所述时间轮的时间指针使用currenttime表示,结合时间轮跨度参数interval判断当前时间轮是否可以存放某个延时任务,若延时任务过期时间为expiredtime,则expiredtime必须同时满足以两个条件,才可存放于时间轮中,expiredtime≥currenttime tickms
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(3)expiredtime≤currenttime interval
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(4)不满足公式(3)则说明延时任务已过期,需要执行此延时任务;不满足公式(4)说明当前时间轮无法容纳此延时任务,此时继续尝试在外层时间轮存放该延时任务;指向外层时间轮的指针使用timewheel,其中,delayqueue指java中原生延时队列,用于存放时间轮槽对象bucket。5.根据权利要求4所述的一种延时任务实现方法,其特征在于,所述时间轮初始化指定tickms、wheelsize和currenttime,其中currenttime为初始化时间轮时的当前时间;在时间轮内部初始化一个延时队列delayqueue,多层时间轮共用同一个delayqueue,同时开启一个后台线程,不断的从延时队列中获取bucket,当获取到bucket时,遍历其存放任务进行处理;当delayqueue中队首bucket未过期或者delayqueue为空时,后台线程进入睡眠状态。6.根据权利要求5所述的一种延时任务实现方法,其特征在于,在所述时间轮添加任务,主要步骤如下:s1、根据公式(4)判断当前时间轮是否可以容纳延时任务;s2、计算出bucket过期时间;
s3、根据公式(3)判断任务是否已经过期。7.根据权利要求6所述的一种延时任务实现方法,其特征在于,在步骤s1中,若可以容纳所述延时任务,根据公式(1)计算延时任务所处时间轮槽下标,根据下标获取槽bucket,然后在该bucket中双向链表tasklist中尾部添加任务;在步骤s2中,判断bucket当前的过期时间是否与计算出过期时间一致,如果一致,则执行步骤s3,否则更新bucket过期时间,然后将bucket添加到delayqueue中;如果一致,则说明bucket已在delayqueue中;expiredtime
bucket
=expiredtime
task-expiredtime
task
%tickms
ꢀꢀꢀꢀꢀꢀꢀꢀ
(5)在步骤s3中,如果已经过期,则将延时任务放入异步线程池执行任务;如果未过期,当前时间轮存在外层时间轮,则继续向外层时间轮添加任务;若不存在,则以内层时间轮指针作为外层时间轮指针构造外层时间轮,然后继续向外层时间轮添加任务。8.根据权利要求7所述的一种延时任务实现方法,其特征在于,在时间轮获取任务时,初始化时间轮开启后台线程,不断地从delayqueue中获取bucket,队首中最先过期的bucket会首先从队列中弹出,设得到bucket的过期时间expiredtime,根据公式(3)判断时间轮当前能表示的最小过期时间是不是比bucket过期时间小,如果是,按照如下公式(6)更新时间轮的时间指针currenttime,currenttime=expiredtime-(expiredtime%tickms)
ꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀꢀ
(6)如果当前时间轮存在外层时间轮,则把当前时间轮的时间指针currenttime作为过期时间expiredtime,继续更新外层时间轮的时间指针,此过程为递归的更新时间轮指针。9.根据权利要求8所述的一种延时任务实现方法,其特征在于,同一个bucket中延时任务过期时间并不一致,相差范围为tickms,时间轮指针更新后,需要重新执行添加任务流程,将外层时间轮上的任务列表降级到时间粒度更细内层时间轮上,直到无法降级到最内层时间轮时执行延时任务;取出bucket所有任务之后要将bucket过期时间置为初始值-1。10.一种延时任务实现装置,其特征在于,包括:至少一个存储器和至少一个处理器;所述至少一个存储器,用于存储机器可读程序;所述至少一个处理器,用于调用所述机器可读程序,执行权利要求1至9中任一所述的方法。

技术总结
本发明涉及任务处理技术领域,具体提供了一种处理延时任务的方法,采用多层的时间轮,一层时间轮底层数据结构为一个环形数组,数组中每个位置代表时间轮中的一个槽,所述槽用于存放延时任务;所述时间轮还包括一个时间指针,时间指针指向时间轮中的槽,随着时间推移,时间指针按照一定时间周期沿着时间轮不断移动,当时间指针指向某个槽时,说明该槽内延时任务已过期,需要取出延时任务执行;所述多层时间轮呈钟表式分布,内层时间轮转动一周,外层时间轮转动一格,所述时间轮依次向外扩展,进而增大时间轮跨度。与现有技术相比,本发明可承接大量延时任务,无须引入其他组件,不会提高系统复杂度、造成资源浪费。造成资源浪费。造成资源浪费。


技术研发人员:李光志 张滨
受保护的技术使用者:浪潮云信息技术股份公司
技术研发日:2021.12.30
技术公布日:2022/4/8
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献