CN115292023B - 定时任务处理方法及装置 - Google Patents
定时任务处理方法及装置 Download PDFInfo
- Publication number
- CN115292023B CN115292023B CN202211219877.0A CN202211219877A CN115292023B CN 115292023 B CN115292023 B CN 115292023B CN 202211219877 A CN202211219877 A CN 202211219877A CN 115292023 B CN115292023 B CN 115292023B
- Authority
- CN
- China
- Prior art keywords
- task
- target
- timing
- time wheel
- target time
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Measurement Of Unknown Time Intervals (AREA)
Abstract
本发明属于数据处理技术领域,提供了一种定时任务处理方法及装置,该定时任务处理方法包括:获取定时任务的报文信息;将报文信息添加至与核ID相对应的目标时间轮,基于定时时长和所述目标时间轮的指针在当前时刻指向的槽位号,得到每个定时任务在目标时间轮中的目标槽位,并将报文信息存储于目标槽位对应的任务链表;在目标时间轮的指针指向目标槽位的情况下,执行任务链表。本发明所述方法实现了将多个不限时长的定时任务组织到单层时间轮中进行处理,避免了在使用多层时间轮时因存在定时任务迁移而导致的处理性能波动问题,且通过支持多核化扩展,提高了并行定时任务处理的效率。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种定时任务处理方法及装置。
背景技术
定时任务是软件系统中常见的任务处理机制,定时任务的维护通常是使用时间轮的定时机制进行。
相关技术中,通常使用多层时间轮多对多核中央处理器(Central ProcessingUnit,CPU)中数量多且定时较长的定时任务进维护,但多层时间轮中的高层时间轮会向低层时间轮迁移定时任务,而且高层时间轮的每个时间精度中都累积了低层级时间轮在其轮转周期内新建的定时任务数,当定时任务频繁创建时,计算机资源会在短时间内被大量占用,导致处理性能降低,且多核CPU中的多个核单元利用同一个多层时间轮并行处理定时任务时也会导致处理性能降低。
发明内容
本发明提供一种定时任务处理方法及装置,用以解决现有技术利用多层时间轮并行处理数量多且定时较长的定时任务时,计算机多核CPU性能降低的缺陷,提高利用多核CPU处理定时任务的处理效率。
本发明提供一种定时任务处理方法,应用于多核中央处理器,所述多核中央处理器中的每个核单元均对应一个单层时间轮,所述单层时间轮为包含多个槽位的环形数组,多个所述槽位按顺序排列,该定时任务处理方法包括:
获取定时任务的报文信息,所述报文信息包括所述定时任务的定时时长和核ID,所述核ID用于表示处理所述定时任务对应的核单元的编号;
将所述报文信息添加至与所述核ID相对应的核单元的目标时间轮,基于所述定时时长和所述目标时间轮的指针在当前时刻指向的槽位号,得到每个所述定时任务在所述目标时间轮中的目标槽位,并将所述报文信息存储于所述目标槽位对应的任务链表,所述目标时间轮为多个所述单层时间轮中的一项,所述目标槽位为多个所述槽位中的一项;
在所述目标时间轮的指针指向所述目标槽位的情况下,执行所述任务链表。
根据本发明提供的一种定时任务处理方法,所述基于所述定时时长和所述目标时间轮的指针在当前时刻指向的槽位号,得到每个所述定时任务在所述目标时间轮中的目标槽位,包括:
基于第一公式得到所述定时任务在所述目标时间轮中的槽位索引号,并基于所述槽位索引号得到所述目标槽位,所述第一公式基于所述定时时长、所述目标时间轮的指针在当前时刻指向的槽位号、所述目标时间轮的槽位精度和所述目标时间轮中多个槽位对应的位数得到。
根据本发明提供的一种定时任务处理方法,所述报文信息还包括表头信息和所述定时任务对应的处理函数,所述在所述目标时间轮的指针指向所述目标槽位的情况下,执行所述任务链表,包括:
基于所述表头信息将所述任务链表拼接至执行列表,并在所述执行列表中的定时任务的到期时间与所述当前时刻的差值小于所述目标时间轮的槽位精度的情况下,执行所述处理函数,所述定时任务的到期时间基于所述定时任务的定时时长和所述当前时刻得到;
在所述执行列表中的定时任务的到期时间与所述当前时刻的差值大于所述目标时间轮的槽位精度的情况下,将所述执行列表中的定时任务的报文信息重新添加至所述目标时间轮,并将所述执行列表中的定时任务的报文信息从所述执行列表中删除。
根据本发明提供的一种定时任务处理方法,所述目标时间轮对应的核单元包括多个,所述在所述目标时间轮的指针指向所述目标槽位的情况下,执行所述任务链表,还包括:
在所述目标时间轮的指针指向所述目标槽位的情况下,将多个所述核单元对应的任务链表分别拼接至执行列表的尾端,并运行所述执行列表。
根据本发明提供的一种定时任务处理方法,所述第一公式为:
其中,S为所述目标时间轮的指针在当前时刻指向的槽位号,N为所述槽位索引号,T为所述定时时长,m为所述目标时间轮的槽位精度,%表示模运算,L为所述目标时间轮中多个槽位对应的位数。
根据本发明提供的一种定时任务处理方法,所述执行列表中的定时任务为多批量处理任务,每个所述批量处理任务对应的处理时间不同,每个所述批量处理任务中的定时任务的数量不超过第二阈值。
根据本发明提供的一种定时任务处理方法,所述将所述执行列表中的定时任务的报文信息从所述执行列表中删除,具体包括:
基于定时任务接口对所述执行列表中的定时任务的报文信息对应的节点执行删除操作。
本发明提供的一种定时任务处理装置,包括:
获取模块,用于获取定时任务的报文信息,所述报文信息包括所述定时任务的定时时长和核ID,所述核ID用于表示处理所述定时任务对应的核单元的编号;
第一处理模块,用于将所述报文信息添加至与所述核ID相对应的核单元的目标时间轮,基于所述定时时长和所述目标时间轮的指针在当前时刻指向的槽位号,得到每个所述定时任务在所述目标时间轮中的目标槽位,并将所述报文信息存储于所述目标槽位对应的任务链表,所述目标时间轮为多个单层时间轮中的一项,所述目标槽位为多个所述槽位中的一项;
第二处理模块,用于在所述目标时间轮的指针指向所述目标槽位的情况下,执行所述任务链表。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述定时任务处理方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述定时任务处理方法。
本发明提供的定时任务处理方法及装置,通过将定时任务按照核ID分发至对应核单元的目标时间轮,并根据定时任务的定时时长、当前时刻以及目标时间轮当前指针指向的槽位号进行对比来确定定时任务的到期时间以及在目标时间轮的目标槽位,在目标槽位对应的链表中存储定时任务,实现了将多个不限时长的定时任务组织到单层时间轮中进行处理,避免了在使用多层时间轮时因存在定时任务迁移而导致的处理性能波动问题,且通过支持多核化扩展,提高了并行定时任务处理的效率。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的定时任务处理方法的流程示意图之一;
图2是本发明提供的定时任务处理方法的流程示意图之二;
图3是本发明提供的定时任务处理装置的结构示意图;
图4是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面结合图1-图3描述本发明的定时任务处理方法及装置。
图1是本发明提供的定时任务处理方法的流程示意图之一,如图1所示,该定时任务处理方法,应用于多核中央处理器,多核中央处理器中的每个核单元对应一个单层时间轮,单层时间轮为包含多个槽位的环形数组,多个槽位按顺序排列,包括:步骤110、步骤120和步骤130。
需要说明的是,单层时间轮是具有一个预设长度的双向链表数组,该数组长度通常选择2的指数幂;每个链表数组元素对应一个槽位,一个槽位的链表中记录的实际是一个精度时长内的所有定时任务,
另外,单层时间轮还附带一个指针,指针用于记录当前系统处理的槽位信息,指针随系统运行时间而顺序移动,每经过一个精度时长移动一个槽位;当移动到最后一个槽位后,下一次移动就回到第一个槽位,从而使链表数组逻辑上成环。
步骤110、获取定时任务的报文信息,报文信息包括定时时长和核ID,核ID用于表示处理定时任务的对应核单元的编号。
在该步骤中,定时时长可根据实际需求自定义设置。
在该步骤中,通过确定定时任务的定时时长以及系统当前时刻,可以得到该定时任务的到期时间。
在该步骤中,多核CPU中存在多个核单元,各个核单元分别对应一个单层时间轮,用于多核CPU在各自核单元对应的时间轮上独立处理对应的时间任务。
可以理解的是,不同的核单元可以用于处理不同的定时任务,在获取定时任务的报文信息后,根据报文信息中携带的核ID信息,将该定时任务分发至编号为核ID的核单元对应的目标时间轮中,这样可以保证获取的定时任务数量较多时,可以将各定时任务发送至指定的单层时间轮中分别处理。
在一些实施例中,可以以链表头信息、定时时长、到期时间和定时任务到期时的处理函数等信息构成定时任务的基本结构。
在该实施例中,可以直接将定时任务的基本机构按照对应的核ID信息发送至对应核单元的目标时间轮进行处理。
步骤120、将报文信息添加至与核ID相对应核单元的目标时间轮,基于定时时长和目标时间轮的指针在当前时刻指向的槽位号,得到每个定时任务在目标时间轮中的目标槽位,并将报文信息存储于目标槽位对应的任务链表,目标时间轮为多个单层时间轮中的一项,目标槽位为多个槽位中的一项。
在该步骤中,一个核单元对应的目标时间轮可以包括多个槽位,各槽位中均可以预设一个任务链表,将该槽位下的定时任务存储在任务链表中,以便在指针直线该槽位时,能够通过该任务链表抽取定时任务并执行。
在该步骤中,根据核ID将对应定时任务分发至编号为核ID的核单元对应的目标时间轮中后,可以根据定时任务中预先存储的执行时间以及系统的当前时刻,确定定时任务在目标时间轮中的目标槽位。
图2是本发明提供的定时任务处理方法的流程示意图之二,在图2所示的实施例中,多核化的单层时间轮可以包括64(28)个槽位,各槽位对应的序号按大小排列分别为0~63,该单层时间轮的槽位精度为1,假设当前系统时刻下指针直线序号为0对应的槽位,该槽位下的任务链表中存储有4个定时任务分别为定时任务1、定时任务2、定时任务3和定时任务4,各定时任务对应的到期时间分分别为0.5、0.4、64.5、0.5。
在一些实施例中,获取系统当前时间并根据该时间控制单层时间轮的指针每经过一个槽位精度后,就将当前指针往下拨动一个槽位,并将该槽位下的定时任务链表挂接到任务执行表的表尾。
在该步骤中,任务链表可以是双向链表,该任务链表可以用于存储所有已到期待执行的定时任务,也可以存储对应目标槽位下的未到期的定时任务。
步骤130、在目标时间轮的指针指向目标槽位的情况下,执行任务链表。
在该步骤中,当目标时间轮的指针移动到定时任务对应的槽位下,可以抽取任务链表中的定时任务并执行。
在一些实施例中,执行定时任务之前,可以将各槽位对应的任务链表分别拼接至一个执行列表,当目标时间轮的指针指向目标槽位时,可以直接运行该执行列表实现对当前槽位下的定时任务的处理。
在该实施例中,执行列表还可以是核单元用于执行定时任务的缓存队列,执行列表中包含了目标时间轮中不同槽位下的任务链表存储的定时任务。
在该实施例中,运行执行列表可以是对执行列表上挂接的各定时任务进行判别和处理,即先判别定时任务是否在本次循环周期内执行,然后将满足在本次循环周期内执行的定时任务根据相应的处理函数进行处理。
在图2所示的实施例中,单层时间轮从序号为0对应的槽位开始沿顺时针运动至序号为63的槽位并返回到序号为0对应的槽位,整个运动周期为指针的一次循环周期,在该循环周期内,指针指向目标槽位时,可以将该目标槽位对应的任务链表挂接至执行列表的尾端位置,通过核单元运行该执行列表中的各定时任务。
在一些实施例中,当目标槽位下的任务链表中存储的定时任务在一个循环周期内仍未到期,则将该定时任务重新添加到对应的目标时间轮中,待下一个循环周期等待执行,直至该定时任务到期。
在一些实施例中,可以通过设置增加定时任务接口实现将定时任务添加至对应核单元的目标时间轮的目标槽位的任务链表中。
本发明提供的定时任务处理方法,通过将定时任务按照核ID分发至对应核单元的目标时间轮,并根据定时任务的定时时长、当前时刻以及目标时间轮当前指针指向的槽位号进行对比来确定定时任务的到期时间以及在目标时间轮的目标槽位,在目标槽位对应的链表中存储定时任务,实现了将多个不限时长的定时任务组织到单层时间轮中进行处理,避免了在使用多层时间轮时因存在定时任务迁移而导致的处理性能波动问题,且通过支持多核化扩展,提高了并行定时任务处理的效率。
在一些实施例中,基于定时时长和目标时间轮的指针在当前时刻指向的槽位号,得到每个定时任务在目标时间轮中的目标槽位,包括:基于第一公式得到定时任务在目标时间轮中的槽位索引号,并基于槽位索引号得到目标槽位,第一公式基于定时时长、所述目标时间轮的指针在当前时刻指向的槽位号、目标时间轮的槽位精度和目标时间轮中多个槽位对应的位数得到。
在该实施例中,定时任务的到期时间可以根据当前时刻的系统时间和定时时长计算得到,例如,当前时刻为14时,定时时长1分钟,到期时间为14时1分。
在该实施例中,槽位索引号可以为目标时间轮中各槽位对应的序号中的一种。
在该实施例中,可以通过增加定时任务接口向目标时间轮的目标槽位的任务链表中添加定时任务,而确定该定时任务的目标槽位可通过如下步骤实现:
(1)当定时任务的定时时长为t时,根据如下公式计算该定时任务到期时间T:
T=t+ currentTime,
其中,currentTime表示系统的当前时刻。
(2)将定时任务的定时时长与目标时间轮的槽位精度的比值加上目标时间轮指针指向的槽位号的结果,与目标时间轮中多个槽位对应的位数进行取模运算,得到该定时任务的槽位索引号,该槽位索引号在目标时间轮中对应的槽位即为该定时任务的目标槽位。
在该实施例中,当添加的定时任务的定时时长t小于或等于TW_Mod * TW_Len时,则对应的目标槽位在距离指针指向的当前槽位的一个循环周期内,且从执行列表中调取该定时任务时,该定时任务一定是到期的,对应的处理函数也一定会被执行,否则,当定时任务的定时时长t大于TW_Mod * TW_Len时,将定时任务添加到目标槽位后,从执行列表中调取该定时任务时,通过对比该定时任务的到期时间与第一阈值可以确定该定时任务尚未到期,则该定时任务对应的处理函数不会被执行,并将该定时任务重新添加到目标时间轮对应给的目标槽位中,待下一个循环周期再进行处理。
本发明提供的定时任务处理方法,通过定时任务的定时时长和目标时间轮在当前指针指向的槽位号定时任务在目标时间轮的槽位索引号,并根据槽位索引号将定时任务添加至对应的目标槽位进行存储,提高了将定时任务添加至目标时间轮的目标槽位的准确率,进而提高定时任务处理效率。
在一些实施例中,报文信息还包括表头信息和定时任务对应的处理函数,在目标时间轮的指针指向目标槽位的情况下,执行任务链表,包括:基于表头信息将任务链表拼接至执行列表中,在执行列表中的定时任务的到期时间与当前时刻的差值小于目标时间轮的槽位精度的情况下,执行处理函数,定时任务的到期时间基于定时任务的定时时长和当前时刻得到;在执行列表中的定时任务的到期时间与当前时刻的差值大于目标时间轮的槽位精度的情况下,将执行列表中的定时任务的报文信息重新添加至目标时间轮,并将执行列表中的定时任务的报文信息从执行列表中删除。
在该实施例中,第一阈值可以根据实际需求自定义设置。
在该实施例中,第一阈值可以是目标时间轮的槽位精度为TW_Mod。
在该实施例中,当定时任务的到期时间与系统当前时刻的差值小于一个目标时间轮的槽位精度时,说明该定时任务即将到期,需要在指针的本次循环周期内执行,否则,将该定时任务从执行列表中移除,重新添加至目标时间轮的对应槽位中,并在指针移动至其重新添加的槽位后,再判断该定时任务是否被执行。
在该实施例中,判别执行列表中的定时任务是否在本次循环周期内执行,可以是根据定时任务对应的到期时长与系统当前时刻的差值与第一阈值进行对比分析后确定。
在图2所示的实施例中,指针指向序号为0的槽位时,该槽位的任务链表连接到执行列表尾端,则在执行列表中新添了4个定时任务,其中,定时任务1、定时任务2和定时任务4分别对应的到期时长均小于第一阈值,则定时任务1、定时任务2和定时任务可以在本次循环周期内通过执行各定时任务对应的处理函数被处理,而定时任务3的定期时长大于第一阈值,则将定时任务3从执行列表中移除,并将定时任务3重新加入至单层时间轮中。
本发明提供的定时任务处理方法,通过设置第一阈值与执行列表上的定时任务的到期时间进行对比,将未到期的定时任务重新添加至目标时间轮,并正常执行到期的定时任务,克服了现有技术中的单层时间轮无法组织过长定时时长的任务的问题。
在一些实施例中,目标时间轮对应的核单元包括多个,在目标时间轮的指针指向目标槽位的情况下,执行任务链表,还包括:在目标时间轮的指针指向目标槽位的情况下,将多个核单元对应的任务链表分别拼接至执行列表的尾端,并运行执行列表。
在该实施例中,各核单元对应的目标时间轮对应同一个系统时间,即当指针满足从当前槽位指向下一个槽位的条件时,各核单元对应目标时间轮的指针均拨动一个槽位精度,并将各目标时间轮分别对应的目标槽位下的任务链表拼接至执行列表的尾端处。
在一些实施例中,可以将各目标时间轮分别对应的目标槽位下的任务链表按照核ID的编号顺序依次拼接至执行列表的尾端。
本发明提供的定时任务处理方法,通过对各核单元均设置单层时间轮,使得多核CPU的各核单元在并行运行多个定时任务时,能够避免因多个核单元共用一个时间轮而发生的锁碰撞问题,从而提升了多个核单元处理定时任务的处理效率。
在一些实施例中,第一公式为:
其中,S为目标时间轮的指针在当前时刻指向的槽位号,N为槽位索引号,T为定时时长,m为目标时间轮的槽位精度,%表示模运算,L为目标时间轮中多个槽位对应的位数。
在图2所示的实施例中,单层时间轮的槽位精度为1,单层时间轮的槽位数为64,通过第一公式计算定时任务1、定时任务2、定时任务3和定时任务4对应的槽位索引号均为0,且定时任务1、定时任务2和定时任务4均在本次循环周期内被处理,而定时任务3将在下一次循环周期内被处理。
本发明提供的定时任务处理方法,通过设置第一公式计算根据不同定时任务的定时时长和目标时间轮当前指针指向的槽位号计算各定时任务在目标时间轮中对应的槽位,提高定时任务处理效率。
在一些实施例中,执行列表中的定时任务为多批量处理任务,每个批量处理任务对应的处理时间不同,每个批量处理任务中的定时任务的数量不超过第二阈值。
在该实施例中,第二阈值可根据实际需求自定义设置。
需要说明的是,多核CPU中存在多个线程,多个线程可以绑定在不同的核单元上运行,例如,其中一个线程可以是利用单层时间轮处理一个或多个循环周期内的定时任务,当定时任务数量过多时,该核单元中用于处理定时任务的线程会一直被占用,从而影响其他线程的运行。
在该实施例中,指针指向的目标槽位时,将对应目标槽位下的任务链表取出并拼接到执行列表中,执行列表中包含多个待执行的定时任务,其中,多个待执行的定时任务可以批量处理,每批次定时任务的处理时间不同,且每批次定时任务的处理数量不超过第二阈值;例如,执行列表中的任务个数为1000个,设置第二阈值为100时,表示待执行的定时任务虽然有1000个,但本批次对应的处理时间内只处理100个定时任务,以此类推,直至执行列表中定时任务全部被处理。
在该实施例中,设多核CPU运行时有A、B和C三个线程在运行,线程A用于单层时间轮的维护,线程B和线程C用于产生定时任务;启动线程A的步骤如下:
(1)通过如下公式,判断是否需要拨动单层时间轮的指针;若判定条件成立,则遍历所有核单元并拨动各核单元对应的单层时间轮的指针移向下一个槽位,将当前槽位下的任务链表拼接到任务列表中,然后当前槽位加1指向下一个槽位并更新上一次指针拨动时间lastTime为currentTime,然后执行步骤(2);若判定条件不成立,则直接执行步骤(2);
currentTime - lastTime ≥TW_Mod ;
(2)检测执行列表是否为空,若为空,则结束步骤(2),继续执行步骤(1)的遍历所有核单元的单层时间轮的操作;若不为空,则从执行列表中循环摘取定时任务,并根据如下公式判定定时任务是否到期,若到期,则执行定时任务对应的处理函数,否则继续从执行列表中循环摘取定时任务,直到处理完所有任务或指定个数的定时任务,然后继续执行步骤(1)的遍历所有核单元的单层时间轮的操作;
T - currentTime ≤ 0。
本发明提供的定时任务处理方法,通过设置第二阈值限定循环周期内最多处理的定时任务个数,提高了多核CPU内的各线程运行的稳定性,进而多核CPU对定时任务的处理效率。
在一些实施例中,将执行列表中的定时任务的报文信息从执行列表中删除,具体包括:基于定时任务接口对执行列表中的定时任务的报文信息对应的节点执行删除操作。
在该实施例中,当定时任务的定时时长t大于TW_Mod * TW_Len时,说明该定时任务不会在本次循环周期内被处理,则可以将该定时任务重新添加到目标时间轮对应给的目标槽位中,待下一个循环周期再进行处理,并可以通过定时任务接口的删除节点从当前执行列表中删除该定时任务。
在一些实施例中,基于定时任务接口和如下公式,计算该定时任务的剩余时间Tr:
Tr= T – currentTime。
本发明提供的定时任务处理方法,通过定时任务接口对执行列表上的定时任务进行删减操作,可以保证定时较长的定时任务不会被错误执行,以提高定时任务处理的准确率。
下面对本发明提供的定时任务处理装置进行描述,下文描述的定时任务处理装置与上文描述的定时任务处理方法可相互对应参照。
图3是本发明提供的定时任务处理装置的结构示意图,如图3所示,该定时任务处理装置,包括:获取模块310、第一处理模块320和第二处理模块330。
获取模块310,用于获取定时任务的报文信息,报文信息包括定时任务的执行时间和核ID,核ID用于表示处理定时任务对应的核单元的编号;
第一处理模块320,用于将报文信息添加至与核ID相对应的核单元的目标时间轮,基于定时时长和目标时间轮的指针在当前时刻指向的槽位号,得到每个定时任务在目标时间轮中的目标槽位,并将报文信息存储于目标槽位对应的任务链表,目标时间轮为多个单层时间轮中的一项,目标槽位为多个槽位中的一项;
第二处理模块330,用于在目标时间轮的指针指向目标槽位的情况下,执行任务链表。
本发明提供的定时任务处理装置,通过将定时任务按照核ID分发至对应核单元的目标时间轮,并根据定时任务的定时时长、当前时刻以及目标时间轮当前指针指向的槽位号进行对比来确定定时任务的到期时间以及在目标时间轮的目标槽位,在目标槽位对应的链表中存储定时任务,实现了将多个不限时长的定时任务组织到单层时间轮中进行处理,避免了在使用多层时间轮时因存在定时任务迁移而导致的处理性能波动问题,且通过支持多核化扩展,提高了并行定时任务处理的效率。
图4示例了一种电子设备的实体结构示意图,如图4所示,该电子设备可以包括:处理器(processor)410、通信接口(Communications Interface)420、存储器(memory)430和通信总线440,其中,处理器410,通信接口420,存储器430通过通信总线440完成相互间的通信。处理器410可以调用存储器430中的逻辑指令,以执行定时任务处理方法,该方法包括:获取定时任务的报文信息,报文信息包括定时任务的定时时长和核ID,核ID用于表示处理定时任务对应的核单元的编号;将报文信息添加至与核ID相对应的核单元的目标时间轮,基于定时时长和目标时间轮的指针在当前时刻指向的槽位号,得到每个定时任务在目标时间轮中的目标槽位,并将报文信息存储于目标槽位对应的任务链表,目标时间轮为多个单层时间轮中的一项,目标槽位为多个槽位中的一项;在目标时间轮的指针指向目标槽位的情况下,执行任务链表。
此外,上述的存储器430中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各方法所提供的定时任务处理方法,该方法包括:获取定时任务的报文信息,报文信息包括定时任务的定时时长和核ID,核ID用于表示处理定时任务对应的核单元的编号;将报文信息添加至与核ID相对应的核单元的目标时间轮,基于定时时长和目标时间轮的指针在当前时刻指向的槽位号,得到每个定时任务在目标时间轮中的目标槽位,并将报文信息存储于目标槽位对应的任务链表,目标时间轮为多个单层时间轮中的一项,目标槽位为多个槽位中的一项;在目标时间轮的指针指向目标槽位的情况下,执行任务链表。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各方法提供的定时任务处理方法,该方法包括:获取定时任务的报文信息,报文信息包括定时任务的定时时长和核ID,核ID用于表示处理定时任务对应的核单元的编号;将报文信息添加至与核ID相对应的核单元的目标时间轮,基于定时时长和目标时间轮的指针在当前时刻指向的槽位号,得到每个定时任务在目标时间轮中的目标槽位,并将报文信息存储于目标槽位对应的任务链表,目标时间轮为多个单层时间轮中的一项,目标槽位为多个槽位中的一项;在目标时间轮的指针指向目标槽位的情况下,执行任务链表。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (9)
1.一种定时任务处理方法,其特征在于,应用于多核中央处理器,所述多核中央处理器中的每个核单元对应一个单层时间轮,所述单层时间轮为包含多个槽位的环形数组,多个所述槽位按顺序排列,所述方法包括:
获取定时任务的报文信息,所述报文信息包括所述定时任务的定时时长和核ID,所述核ID用于表示处理所述定时任务对应的核单元的编号;
将所述报文信息添加至与所述核ID相对应的核单元的目标时间轮,基于所述定时时长和所述目标时间轮的指针在当前时刻指向的槽位号,得到每个所述定时任务在所述目标时间轮中的目标槽位,并将所述报文信息存储于所述目标槽位对应的任务链表,所述目标时间轮为多个所述单层时间轮中的一项,所述目标槽位为多个所述槽位中的一项;
在所述目标时间轮的指针指向所述目标槽位的情况下,执行所述任务链表;
所述报文信息还包括表头信息和所述定时任务对应的处理函数,所述在所述目标时间轮的指针指向所述目标槽位的情况下,执行所述任务链表,包括:
基于所述表头信息将所述任务链表拼接至执行列表,并在所述执行列表中的定时任务的到期时间与所述当前时刻的差值小于所述目标时间轮的槽位精度的情况下,执行所述处理函数,所述定时任务的到期时间基于所述定时任务的定时时长和所述当前时刻得到;
在所述执行列表中的定时任务的到期时间与所述当前时刻的差值大于所述目标时间轮的槽位精度的情况下,将所述执行列表中的定时任务的报文信息重新添加至所述目标时间轮,并将所述执行列表中的定时任务的报文信息从所述执行列表中删除。
2.根据权利要求1所述的定时任务处理方法,其特征在于,所述基于所述定时时长和所述目标时间轮的指针在当前时刻指向的槽位号,得到每个所述定时任务在所述目标时间轮中的目标槽位,包括:
基于第一公式得到所述定时任务在所述目标时间轮中的槽位索引号,并基于所述槽位索引号得到所述目标槽位,所述第一公式基于所述定时时长、所述目标时间轮的指针在当前时刻指向的槽位号、所述目标时间轮的槽位精度和所述目标时间轮中多个槽位对应的位数得到。
3.根据权利要求1所述的定时任务处理方法,其特征在于,所述目标时间轮对应的核单元包括多个,所述在所述目标时间轮的指针指向所述目标槽位的情况下,执行所述任务链表,还包括:
在所述目标时间轮的指针指向所述目标槽位的情况下,将多个所述核单元对应的任务链表分别拼接至执行列表的尾端,并运行所述执行列表。
5.根据权利要求4所述的定时任务处理方法,其特征在于,所述执行列表中的定时任务为多批量处理任务,每个所述批量处理任务对应的处理时间不同,每个所述批量处理任务中的定时任务的数量不超过第二阈值。
6.根据权利要求1所述的定时任务处理方法,其特征在于,所述将所述执行列表中的定时任务的报文信息从所述执行列表中删除,具体包括:
基于定时任务接口对所述执行列表中的定时任务的报文信息对应的节点执行删除操作。
7.一种定时任务处理装置,其特征在于,包括:
获取模块,用于获取定时任务的报文信息,所述报文信息包括所述定时任务的定时时长和核ID,所述核ID用于表示处理所述定时任务对应的核单元的编号;
第一处理模块,用于将所述报文信息添加至与所述核ID相对应的核单元的目标时间轮,基于所述定时时长和所述目标时间轮的指针在当前时刻指向的槽位号,得到每个所述定时任务在所述目标时间轮中的目标槽位,并将所述报文信息存储于所述目标槽位对应的任务链表,所述目标时间轮为多个单层时间轮中的一项,所述目标槽位为多个所述槽位中的一项;
第二处理模块,用于在所述目标时间轮的指针指向所述目标槽位的情况下,执行所述任务链表;
所述报文信息还包括表头信息和所述定时任务对应的处理函数,所述在所述目标时间轮的指针指向所述目标槽位的情况下,执行所述任务链表,包括:
基于所述表头信息将所述任务链表拼接至执行列表,并在所述执行列表中的定时任务的到期时间与所述当前时刻的差值小于所述目标时间轮的槽位精度的情况下,执行所述处理函数,所述定时任务的到期时间基于所述定时任务的定时时长和所述当前时刻得到;
在所述执行列表中的定时任务的到期时间与所述当前时刻的差值大于所述目标时间轮的槽位精度的情况下,将所述执行列表中的定时任务的报文信息重新添加至所述目标时间轮,并将所述执行列表中的定时任务的报文信息从所述执行列表中删除。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述定时任务处理方法。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述定时任务处理方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211219877.0A CN115292023B (zh) | 2022-10-08 | 2022-10-08 | 定时任务处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211219877.0A CN115292023B (zh) | 2022-10-08 | 2022-10-08 | 定时任务处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115292023A CN115292023A (zh) | 2022-11-04 |
CN115292023B true CN115292023B (zh) | 2023-01-17 |
Family
ID=83835043
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211219877.0A Active CN115292023B (zh) | 2022-10-08 | 2022-10-08 | 定时任务处理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115292023B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116302455B (zh) * | 2023-05-23 | 2023-09-01 | 深圳前海环融联易信息科技服务有限公司 | 定时任务的处理方法及装置、存储介质、计算机设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104394096A (zh) * | 2014-12-11 | 2015-03-04 | 福建星网锐捷网络有限公司 | 一种基于多核处理器的报文处理方法及多核处理器 |
GB202017885D0 (en) * | 2020-09-30 | 2020-12-30 | Imagination Tech Ltd | Building and scheduling tasks for parallel processing |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102055649B (zh) * | 2009-10-29 | 2012-11-21 | 成都市华为赛门铁克科技有限公司 | 多核系统的报文处理方法、装置及系统 |
CN106020333B (zh) * | 2016-05-20 | 2019-03-05 | 京信通信系统(中国)有限公司 | 多核定时器实现方法和多核系统 |
CN110990141B (zh) * | 2019-12-12 | 2024-04-26 | 深圳前海环融联易信息科技服务有限公司 | 定时任务处理方法、装置、计算设备及存储介质 |
CN112395057B (zh) * | 2020-11-12 | 2023-04-21 | 苏宁云计算有限公司 | 基于定时任务的数据处理方法、装置、计算机设备 |
CN115033352A (zh) * | 2021-02-23 | 2022-09-09 | 阿里云计算有限公司 | 多核处理器任务调度方法、装置及设备、存储介质 |
CN114416308A (zh) * | 2021-12-24 | 2022-04-29 | 上海浦东发展银行股份有限公司 | 任务调度方法、装置、计算机设备和存储介质 |
CN114968529A (zh) * | 2022-05-30 | 2022-08-30 | 深圳希施玛数据科技有限公司 | 定时器实现方法及相关产品 |
-
2022
- 2022-10-08 CN CN202211219877.0A patent/CN115292023B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104394096A (zh) * | 2014-12-11 | 2015-03-04 | 福建星网锐捷网络有限公司 | 一种基于多核处理器的报文处理方法及多核处理器 |
GB202017885D0 (en) * | 2020-09-30 | 2020-12-30 | Imagination Tech Ltd | Building and scheduling tasks for parallel processing |
Also Published As
Publication number | Publication date |
---|---|
CN115292023A (zh) | 2022-11-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110442462B (zh) | Tee系统中的多线程数据传输方法和装置 | |
CN108776897B (zh) | 数据处理方法、装置、服务器及计算机可读存储介质 | |
CN108055343A (zh) | 用于机房的数据同步方法及装置 | |
CN115292023B (zh) | 定时任务处理方法及装置 | |
CN110990141B (zh) | 定时任务处理方法、装置、计算设备及存储介质 | |
CN110008031B (zh) | 设备操作方法、集群系统、电子设备及可读取存储介质 | |
CN107704604B (zh) | 一种消息持久化方法、服务器和计算机可读存储介质 | |
US7735083B2 (en) | System and method for scheduling a future event | |
CN113076304A (zh) | 一种分布式版本管理方法、装置和系统 | |
CN109714249A (zh) | 一种小程序消息的推送方法及相关装置 | |
CN116663639B (zh) | 一种梯度数据同步方法、系统、装置及介质 | |
CN110061933B (zh) | 一种数据处理方法及装置、设备、存储介质 | |
CN115951845B (zh) | 一种磁盘管理方法、装置、设备及存储介质 | |
CN107295059A (zh) | 业务推送量的统计系统及方法 | |
CN109962861B (zh) | 一种报文统计方法及装置 | |
CN112905322B (zh) | 资源加锁的方法、计算设备及计算机存储介质 | |
CN112231105B (zh) | 基于区块链的区块写入方法及系统 | |
CN115391318A (zh) | 过期数据的清除方法、装置、存储介质及计算机设备 | |
CN107704329A (zh) | 一种消息持久化方法、服务器和计算机可读存储介质 | |
CN110677152B (zh) | 信号计数方法、装置和数字电路 | |
CN113326141A (zh) | 一种区块链节点的内存管理方法和装置 | |
CN113254271A (zh) | 一种数据序列恢复方法、装置、设备及存储介质 | |
CN111158886A (zh) | 用于优化操作系统任务调度的方法、装置和智能设备 | |
CN117527937B (zh) | 基于排序窗口的数据报文的排序方法、装置及设备 | |
CN116009910A (zh) | 梅克尔树的更新方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |