一种定时任务的执行方法及计算设备技术

技术编号:36705716 阅读:31 留言:0更新日期:2023-03-01 09:27
一种定时任务的执行方法,包括:确定时间轮定时器的循环指针指向第一时间槽的第一时间,所述第一时间槽为所述循环指针当前指向的时间槽的下一个时间槽;在当前时间大于等于所述第一时间的情况下,将所述定时器的循环指针指向第一时间槽;获取所述时间轮定时器的触发轮次;触发所述第一任务列表中的至少一个定时任务执行,其中,所述第一任务列表中的各个定时任务的触发轮次与所述时间轮定时器的触发轮次相同。对时间轮定时器内的定时任务按照触发轮次进行分层管理,提升了时间轮定时器任务触发性能,使得时间轮定时器可以支持更大量的定时任务。定时任务。定时任务。

【技术实现步骤摘要】
一种定时任务的执行方法及计算设备


[0001]本专利技术涉及计算机数据处理
,尤其涉及一种定时任务的执行方法及计算设备。

技术介绍

[0002]在计算机软件系统中,定时任务是一种非常常见的任务形态,例如:声称该月度统计报表、会员积分结算、邮件推送等,其本质都是定时任务。在计算机软件系统中,定时任务的触发一般都是有各种类型的定时器来完成。其中,时间轮定时器是一种简单、不依赖第三方组件,且能高效进行任务触发的定时。但是,由于时间轮定时器中划分的存储空间的数量有限,在大量延时任务的场景下,会导致不同延时长度的任务会被分配到同一个存储空间中。导致时间轮触发时,需要遍历同一个存储空间中的每一个任务,降低了定时器任务触发的性能。

技术实现思路

[0003]本申请提供了一种定时任务的执行方法及计算设备,通过任务分层机制,提升了时间定时器任务触发性能,使得时间轮定时器可以支持更大量的定时任务。
[0004]第一方面,本申请提供了一种定时任务的执行方法,包括:确定时间轮定时器的循环指针指向第一时间槽的第一时间,第一时间槽为循环指针当前指向的时间槽的下一个时间槽;在当前时间大于等于第一时间的情况下,将时间轮定时器的循环指针指向第一时间槽;获取时间轮定时器的触发轮次;根据时间轮定时器的触发轮次,触发第一时间槽中的第一任务列表中的定时任务执行,其中,第一任务列表中的各个定时任务的触发轮次与时间轮定时器的触发轮次相同。
[0005]也就是说,在触发时间轮定时器中存储的定时任务执行时,在确定时间轮定时器的循环指针指向的时间槽(比如第一时间槽)以后,可以根据时间轮定时器的触发轮次,从第一时间槽中的多个任务队列中确定与时间轮定时器的触发轮次具有相同触发轮次的任务队列(比如第一任务队列)。在确定第一任务队列以后,可以触发第一任务队列中的定时任务执行。即在时间轮定时器中的定时任务按照触发轮次,进行分层存储。当需要触发时间轮定时器的某一个时间槽中的定时任务执行时,只需要遍历与时间轮定时器具有相同触发轮次的定时任务,而不需要遍历时间槽中存储的所有定时任务,有效提升了时间轮定时器的触发性能。
[0006]在一个可能的实现方式中,触发第一任务列表中的定时任务执行,包括:遍历第一任务列表,若第一任务列表中存在至少一个定时任务的触发时间小于当前时间,触发至少一个定时任务执行。
[0007]也就是说,由于时间轮定时器是存在误差的,为了保证可以更加准确的触发时间轮定时器中存储的定时任务,在触发第一任务列表中的定时任务执行之前,可以对第一任务列表中存储的定时任务的进行进一步的判定,以保证执行的定时任务都已经达到触发时
间。
[0008]在一个可能的实现方式中,遍历第一任务列表,触发执行目标定时任务后,该方法还包括:确定时间轮定时器的循环指针指向第二时间槽的第二时间,其中,第二时间槽为第一时间槽的下一个时间槽;在当前时间小于第二时间的情况下,确定时间轮定时器需要休眠的第三时间,第三时间为毫秒级别的时间;在第三时间大于等于1的情况下,使用系统函数sleep触发时间轮定时器休眠第三时间;在第三时间小于1的情况下,使用Pause指令触发时间轮定时器进行休眠。
[0009]也就是说,可以通过时间轮定时器休眠的方式,来模拟时钟轮定时器转动。其中,通过pause指令配合sleep函数的方式推动时间轮定时器进行转动,可以在性能不变的情况下更好的利用系统的CPU资源,并且降低了CPU功耗。
[0010]在一个可能的实现方式中,使用Pause指令触发时间轮定时器进行休眠,包括:等待固定的时间间隔后,若当前时间小于第二时间,继续触发时间轮定时器进行休眠。
[0011]也就是说,当时间轮定时器的进程调用Pause指令以后,时间轮定时器的进程会进行休眠,但是时间轮定时器的进程不会释放CPU。时间轮定时器的进程会在一定的时间间隔(比如10个钟周期)后自动唤醒,并检查当前时间是否大于等于第二时间。在当前时间小于第二时间的情况下,时间轮定时器的进程会继续休眠,等待下一次唤醒。
[0012]在一个可能的实现方式中,触发第一时间槽中的第一任务列表中的定时任务执行之前,该方法还包括:接收定时任务,定时任务中包含定时任务的延时执行时间;根据定时任务的延时执行时间,确定定时任务的触发时间;根据定时任务的触发时间,确定定时任务的触发轮次、定时任务对应的第一时间槽;根据定时任务的触发轮次,将定时任务存储到第一时间槽中的第一任务列表中。
[0013]也就是说,在将定时任务存储到时间轮定时器中对应的时间槽时,可以在对应的时间槽中,按照定时任务的触发轮次,对定时任务进行分层存储。即在对应的时间槽中包括多个任务列表,每一个任务列表用于存储相同触发轮次的定时任务。当时间轮定时器的循环指针,指向某一个时间槽时,只需要根据时间轮定时器的当前触发轮次,快速检索(时间复杂度O(1))对应的延时任务列表,快速触发任务执行。
[0014]在一个可能的实现方式中,根据定时任务的触发轮次,将定时任务存储到第一时间槽中的第一任务列表中,包括:根据定时任务的触发轮次,从第一时间槽中的至少一个任务列表中确定第一任务列表;在第一时间槽中存在第一任务列表的情况下,将定时任务存储到第一任务列表中;在第一时间槽中不存在第一任务列表的情况下,在第一时间槽中增加第一任务列表,将定时任务存储到第一任务列表中。
[0015]也就是说,当时间轮定时器的第一时间槽中,已经与接收的定时任务的触发轮次相同的任务列表时,可以直接将接收的定时任务存储到该任务列表中。当时间轮定时的第一时间槽中,不存在与接收的定时任务的触发轮次相同的任务列表时,可以先在第一时间槽中创建与接收的定时任务的触发轮次相同的任务列表,然后再将接收的定时任务存储到该任务列表中。
[0016]在一个可能的实现方式中,触发第一任务列表中的定时任务执行以后,该方法还包括:遍历第一时间槽中的第二任务列表,第二任务列表中的各个定时任务的触发轮次与时间轮定时器的上一个触发轮次相同;若第二任务列表中存在剩余定时任务,触发执行第
二任务列表中的剩余定时任务;删除第一时间槽中的第二任务列表。
[0017]也就是说,在触发第一时间槽中的第一任务列表中的定时任务执行以后,还需要遍历时间轮定时器的当前触发轮次的上一个触发轮次对应的任务列表,并触发该任务列表中未触发的定时任务执行,以保证存储在时间轮定时器中的定时任务都能够被触发。进一步地,为了减少时间轮定时器占用的存储空间,时间轮定时器在遍历完时间轮定时器的当前触发轮次的上一个触发轮次对应的任务列表后,还需要将该任务列表从第一时间槽中删除。
[0018]在一个可能的实现方式中,确定时间轮定时器的循环指针指向第一时间槽的第一时间,包括:确定时间轮定时器的循环指针指向第一时间槽时,循环指针的转动次数;根据循环指针的转动次数和时间轮定时器的单位时间,确定第一时间;其中,时间轮定时器的单位时间为循环指针转动一次需要的时间。
[0019]在一个可能的实现方式中本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种定时任务的执行方法,其特征在于,包括:确定时间轮定时器的循环指针指向第一时间槽的第一时间,其中,所述第一时间槽为所述循环指针当前指向的时间槽的下一个时间槽;在当前时间大于等于所述第一时间的情况下,将所述时间轮定时器的循环指针指向第一时间槽;获取所述时间轮定时器的触发轮次;根据所述时间轮定时器的触发轮次,触发所述第一时间槽中的第一任务列表中的定时任务执行,其中,所述第一任务列表中的各个定时任务的触发轮次与所述时间轮定时器的触发轮次相同。2.根据权利要求1所述的方法,其特征在于,所述触发所述第一任务列表中的定时任务执行,包括:遍历所述第一任务列表,触发执行目标定时任务;其中,所述目标定时任务为第一任务列表中触发时间小于等于当前时间的定时任务。3.根据权利要求2任一项所述的方法,其特征在于,所述遍历所述第一任务列表,触发执行目标定时任务后,所述方法还包括:确定所述时间轮定时器的循环指针指向第二时间槽的第二时间,其中,所述第二时间槽为所述第一时间槽的下一个时间槽;在当前时间小于所述第二时间的情况下,确定所述时间轮定时器需要休眠的第三时间,所述第三时间为毫秒级别的时间;在所述第三时间大于等于1毫秒的情况下,使用系统函数sleep触发所述时间轮定时器休眠所述第三时间;在所述第三时间小于1毫秒的情况下,使用Pause指令触发所述时间轮定时器进行休眠。4.根据权利要求3所述的方法,其特征在于,所述使用Pause指令触发所述时间轮定时器进行休眠,包括:等待固定的时间间隔后,若所述当前时间小于所述第二时间,继续触发所述时间轮定时器进行休眠。5.根据权利要求1

4任一项所述的方法,其特征在于,所述触发所述第一时间槽中的第一任务列表中的定时任务执行之前,所述方法还包括:接收定时任务,所述定时任务中包含所述定时任务的延时执行时间;根据所述定时任务的延时执行时间,确定所述定时任务的触发时间;根据所述定时任务的触发时间,确定所述定时...

【专利技术属性】
技术研发人员:石林灵
申请(专利权)人:超聚变数字技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1