1.本技术涉及嵌入式系统领域,尤其涉及定时器管理方法、装置、设备及存储介质。
背景技术:
2.定时,是嵌入式系统中一个必不可少的功能。在目前的嵌入式系统中,一般是设置一个单独的定时任务来处理软件定时器,其他任务通过系统接口将定时器回调函数注册到该定时任务中实现添加定时器,当定时器超时时间到达时由定时器任务执行定时器回调函数。
3.由于定时器统一在定时任务中执行,因此,会出现定时器任务执行定时器回调函数访问其他任务的数据的同时,其他任务也需要对数据进行读写,这样会导致数据访问冲突。
技术实现要素:
4.本技术提供定时器管理方法、装置、设备及存储介质,以解决通过单独的定时器任务处理定时器存在的数据访问冲突的技术问题。
5.第一方面,提供一种定时器管理方法,包括:
6.在处理完目标任务的事务,进入所述目标任务的事务等待期之前,查询所述目标任务的定时器链表,所述事务等待期为等待事务触发的时期,所述定时器链表用于管理所述目标任务的定时器的信息,所述定时器的信息包括定时器对应的事务和超时时间,一个任务对应一个定时器链表;
7.在查询到未超时的定时器的情况下,确定目标定时器的剩余定时时长,所述目标定时器为查询到的首个未超时的定时器;
8.将所述剩余定时时长作为所述事务等待期的最大等待时长。
9.在该技术方案中,在处理完目标任务的事务时,在进入等待事务触发的时期之前,通过查询目标任务的定时器链表,并在定时器链表中查询到未超时的定时器的情况下,确定查询到的最快超时的定时器的剩余定时时长,并将该最快超时的定时器的剩余定时时长作为事务等待期的最大等待时长后,进入任务等待期。一个任务对应一个定时器链表,各任务通过查询自身的定时器链表即可确定定时器是否超期,并在定时器超期时自行执行定时器回调函数,由于是在处理完事务后并在进入等待事务触发的时期之前执行查询定时器的操作,因而不会造成数据访问冲突;另外,在查询到最快超时的定时器时将该最快超时的定时器的剩余定时时长作为等待事务触发的时期的最大等待时长,使得任务在进入等待事务触发的时期后能在该定时器超时之前从等待事务触发的时期中唤醒,从而及时对定时器进行处理,保证定时器链表中的定时器能准时触发运行。
10.结合第一方面,在一种可能的实现方式中,所述定时器在所述定时器链表中按超时时间升序排列;所述查询所述目标任务的定时器链表,包括:从i=1开始,将所述定时器链表中的第i个定时器作为当前定时器,判断所述当前定时器是否超时;所述在查询到未超
时的定时器的情况下,确定目标定时器的剩余定时时长,包括:若所述当前定时器未超时,将所述当前定时器确定为所述目标定时器,并确定目标定时器的剩余定时时长;所述在查询到超时的定时器的情况下,执行所述超时的定时器对应的事务,包括:若所述当前定时器超时,执行所述当前定时器对应的事务,并将第(i+1)个定时器作为所述当前定时器,执行所述判断所述当前定时器是否超时的步骤,直至执行完所述定时器链表中所有已经超时的定时器对应的事务。通过按序查询定时器链表和执行定时器对应的事务,能够保证目标任务的每个定时器都能准确运行。
11.结合第一方面,在一种可能的实现方式中,所述定时器的信息还包括是否为周期运行的定时器;所述执行所述当前定时器对应的事务之后,还包括:若所述当前定时器为周期运行的定时器,确定所述当前定时器下次超时的超时时间,按所述当前定时器下次超时的超时时间,将所述当前定时器插入到所述定时器链表中。通过将周期运行的定时器添加到定时器链表中,能保证定时器能够准确按周期运行。
12.结合第一方面,在一种可能的实现方式中,所述判断所述当前定时器是否超时,包括:若所述当前定时器的超时时间小于或等于系统当前时间,则确定所述当前定时器超时;若所述当前定时器的超时时间大于所述系统当前时间,则确定所述当前定时器未超时。
13.结合第一方面,在一种可能的实现方式中,所述方法还包括:在所述定时器链表中不存在定时器的情况下,进入所述事务等待期。
14.结合第一方面,在一种可能的实现方式中,所述方法还包括:若所述当前定时器超时且所述当前定时器为非周期运行的定时器,从所述定时器链表中移除所述当前定时器的信息。
15.结合第一方面,在一种可能的实现方式中,所述进入所述事务等待期之后,还包括:在获取到所述目标任务的待处理事务的情况下,对所述待处理事务进行处理,并在处理结束后,执行所述查询所述目标任务的定时器链表的步骤。
16.第二方面,提供一种定时器管理装置,包括:
17.查询模块,用于在处理完目标任务的事务,进入所述目标任务的事务等待期之前,查询所述目标任务的定时器链表,所述事务等待期为等待事务触发的时期,所述定时器链表用于管理所述目标任务的定时器的信息,所述定时器的信息包括定时器对应的事务和超时时间,一个任务对应一个定时器链表;
18.执行模块,用于在查询到超时的定时器的情况下,执行所述超时的定时器对应的事务;
19.超时时长确定模块,用于在查询到未超时的定时器的情况下,确定目标定时器的剩余定时时长,所述目标定时器为查询到的最快超时的定时器;
20.等待时长确定模块,用于将所述剩余定时时长作为所述事务等待期的最大等待时长,进入所述事务等待期,在进入所述事务等待期的时长大于或等于所述最大等待时长的情况下,唤醒所述查询模块执行所述查询所述目标任务的定时器链表的步骤。
21.第三方面,提供一种计算机设备,包括存储器以及一个或多个处理器,一个或多个处理器用于执行存储在存储器中的一个或多个计算机程序,一个或多个处理器在执行一个或多个计算机程序时,使得该计算机设备实现上述第一方面的定时器管理方法。
22.第四方面,提供一种计算机可读存储介质,计算机可读存储介质存储有计算机程
序,计算机程序包括程序指令,上述程序指令当被处理器执行时使上述处理器执行上述第一方面的定时器管理方法。
23.本技术可以实现如下技术效果:一个任务对应一个定时器链表,各任务通过查询自身的定时器链表即可确定定时器是否超期,并在定时器超期时自行执行定时器回调函数,由于是在处理完事务后并在进入等待事务触发的时期之前执行查询定时器的操作,因而不会造成数据访问冲突;另外,在查询到最快超时的定时器时将该最快超时的定时器的剩余定时时长作为等待事务触发的时期的最大等待时长,使得任务在进入等待事务触发的时期后能在该定时器超时之前从等待事务触发的时期中唤醒,从而及时对定时器进行处理,保证定时器链表中的定时器能准时触发运行。
附图说明
24.图1为本技术实施例提供的一种定时器管理方法的流程图;
25.图2是本技术实施例提供的一种定时器管理装置的结构示意图;
26.图3是本技术实施例提供的一种计算机设备的结构示意图。
具体实施方式
27.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行描述。
28.本技术的技术方案可适用于嵌入式系统,具体可用于嵌入式系统中的各任务的定时器设计。
29.本技术的实现原理如下:让每个需要创建定时器的任务(以下简称目标任务)各自管理自身的定时器,由目标任务自行执行自身的定时器回调函数(即执行定时器对应的事务),其中,目标任务通过定时器链表管理定自身的定时器。目标任务在处理完自身的事务之后,在进入目标任务的事务等待期之前,对定时器链表中的定时器进行管理,按顺序执行定时器链表中超时的定时器对应的事务,并将定时器链表中最快超时的定时器的剩余定时时长作为事务等待期的最大剩余时长。由于各个任务自行执行自身的定时器的回调函数,且在处理完自身的事务后执行定时器的回调函数,因此不会造成数据访问冲突;由于在查询到最快超时的定时器时将该最快超时的定时器的剩余定时时长作为等待事务触发的时期的最大等待时长,使得任务在进入等待事务触发的时期后能在该定时器超时之前从事务等待期中唤醒,从而及时对定时器进行处理,保证定时器准时触发运行。
30.以下具体介绍本技术的技术方案。
31.参见图1,图1为本技术实施例提供的一种定时器管理方法的流程图,该方法可应用于嵌入式系统,如图1所示,该方法包括如下步骤:
32.s101,在处理完目标任务的事务,进入目标任务的事务等待期之前,查询目标任务的定时器链表。
33.其中,目标任务可以为嵌入式系统内的任意一个任务,目标任务可用于实现嵌入式系统中某个具体的功能,如led灯驱动功能、按键检测功能,等等,不限于这里的描述。目标任务的事务指的是目标任务实现功能所需执行的操作,如处理接收的事件或消息等。例如,对于一个led灯任务,其对应的命令分别有点亮第n1个led灯,熄灭第n2个led灯,使第n3个led灯闪烁等,那么事务,即为处理这些命令,以点亮第n1个led灯,熄灭第n2个led灯,并
使第n3个led灯闪烁。
34.目标任务的事务等待期为等待事务触发的时期,可以理解为是目标任务执行完具体的事务后进入的休眠期,在目标任务的等待事务期内,目标任务可处于休眠状态,不执行任何操作。
35.其中,目标任务的定时器链表是用于管理目标任务的定时器的信息的链表,其中,定时器的信息包括定时器对应的事务和超时时间。在本技术实施例中,每个任务均对应有一个定时器链表,分别用于管理各个任务各自的定时器的信息。超时时间是指定时器的超时时间,也即需要执行定时器对应的事务的时间。。
36.在一种可行的实施方式中,目标任务的定时器在定时器链表中按超时时间升序排列,通过在定时器链表中将定时器按超时时间升序排列,能保证优先执行超时时间较早的定时器,使得定时器准时触发运行。具体地,可以按如下方式查询目标任务的定时器链表:
37.a1、从i=1开始,将目标任务的定时器链表中的第i个定时器作为当前定时器。
38.a2、判断当前定时器是否超时。
39.具体地,可以将当前定时器的超时时间与系统当前时间进行比较,若当前定时器的超时时间小于或等于系统当前时间,则确定当前定时器超时;若当前定时器的超时时间大于系统当前时间,则确定当前定时器未超时。其中,系统当前时间可以为嵌入式系统的计时时间,具体实现中,可基于嵌入式系统中的节拍计数器计数得到的节拍数(ticks)换算得到系统当前时间。
40.其中,若当前定时器未超时,则执行下述步骤a3;若当前定时器超时,则执行下述步骤a4。
41.a3、将当前定时器确定为首个未超时的定时器,即目标定时器,执行后续步骤s102~s103。
42.a4、执行当前定时器对应的事务。
43.其中,在执行完当前定时器对应的事务后,可以将该当前定时器的信息从目标任务的定时器链表中移除。
44.可选地,若当前定时器为周期运行的定时器,还可以确定当前定时器下次超时的超时时间,按当前定时器下次超时的超时时间,将当前定时器插入到定时器链表中。其中,当前定时器下次超时的超时时间等于当前定时器当前的超时时间与该当前定时器的运行周期之和。
45.具体地,可以从j=1开始,将当前定时器下次超时的超时时间与定时器链表中剩余的第j个定时器的超时时间进行比较,若当前定时器下次超时的超时时间小于或等于与定时器链表中剩余的第j个定时器的超时时间,则将当前定时器插入在第j个定时器之前;若当前定时器下次超时的时间大于定时器链表中剩余的第j个定时器的超时时间,则将j+1,执行将当前定时器下次超时的超时时间与定时器链表中剩余的第j个定时器的超时时间进行比较的步骤;若当前定时器下次超时的超时时间大于目标任务的定时器链表中剩余的所有定时器的超时时间,则将当前定时器插入至目标任务的定时器链表末尾。通过将周期运行的定时器添加到定时器链表中,能保证定时器能够准确按周期运行。
46.a5、判断当前定时器是否为定时器链表中的最后一个定时器。
47.若当前定时器为定时器链表中的最后一个定时器,则本次查询目标任务的定时器
链表结束;若当前定时器不为定时器链表中的最后一个定时器,将第(i+1)个定时器作为当前定时器,返回执行上述步骤a2。
48.通过按序查询定时器链表,能够保证目标任务的每个定时器都能准确触发运行。
49.可选地,在目标任务的定时器链表中不存在定时器的情况下,直接进入事务等待期。可以理解的是,此次事务等待期为永久阻塞等待,直到有消息或事件到来唤醒任务。可选的,查询目标任务的定时器链表若接收到的反馈是系统最大时间(比如,链表查询函数返回了系统最大时间(0xffffffff)),表示目标任务的定时器链表中不存在定时器,也即目标任务未创建定时器,然后进入事务等待期。
50.s102,在查询到未超时的定时器的情况下,确定目标定时器的剩余定时时长,目标定时器为查询到的最快超时的定时器。
51.这里,目标定时器的剩余定时时长等于目标定时器的超时时间与系统当前时间的差值,有关于目标定时器的超时时间和系统当前时间的概念,可参考前述步骤s101的有关描述。
52.s103,将目标定时器的剩余定时时长作为目标任务的事务等待期的最大等待时长。
53.s104,进入目标任务的事务等待期。
54.在进入事务等待期的时长大于或等于最大等待时长的情况下,执行步骤s101。
55.其中,有关于目标任务的事务等待期的概念,可参考前述描述。
56.在达到目标任务的事务等待器的最大等待时长时,查询目标任务的定时器链表,能够使保证步骤s101确定的目标定时器能够得到及时地处理,及保证定时器准时触发运行。
57.其中,在进入目标任务的事务等待期后,若获取到目标任务的待处理事务,则对待处理事务进行处理,并在处理结束后,执行前述步骤s101。
58.为便于理解,以下通过一个具体的例子来对上述方案进行说明。假设目标任务的定时器链表的如图1所示,表1中的定时器t3为周期运行的定时器,定时器t3的运行周期为4s,系统当前时间为864111000(00:00:11.000 1days),指系统从上电到当前的时间。
59.定时器超时时间t186410930(00:00:10.930 1days)t286410956(00:00:10.956 1days)t386411000(00:00:11.000 1days)t486412000(00:00:12.000 1days)t586415000(00:00:15.000 1days)
60.表1
61.定时器管理方法具体如下:
62.1)从表1的首个定时器开始查询,得到定时器t1,将定时器t1作为当前定时器。
63.2)将定时器t1与系统当前时间进行比较,由于定时器t1的超时时间小于系统当前时间,则确定定时器t1超时,执行定时器t1的回调函数(即执行定时器t1对应的事务),并从定时器链表中移除定时器t1。
64.3)将定时器t2作为当前定时器。
65.4)将定时器t2与系统当前时间进行比较,由于定时器t2的超时时间小于系统当前时间,则确定定时器t2超时,执行定时器t2的回调函数(即执行定时器t2对应的事务),从定时器链表中移除定时器t2。
66.在经过1)-4)后,目标任务的定时器链表如表2所示:
67.定时器超时时间t386411000(00:00:11.000 1days)t486412000(00:00:12.000 1days)t586415000(00:00:15.000 1days)
68.表2
69.5)将定时器t3作为当前定时器。
70.6)将定时器t3与系统当前时间进行比较,由于定时器t3的超时时间小于系统当前时间,则确定定时器t3超时,执行定时器t3的回调函数(即执行定时器t3对应的事务),从定时器链表中移除定时器t3;由于定时器t3为周期运行的定时器,根据定时器t3的运行周期,计算得到定时器t3下次超时的超时时间,定时器t3下次超时的超时时间为86414000(00:00:14.000 1days),定时器t3下次超时的超时时间大于定时器t4的超时时间且小于定时器t5的超时时间,因此将定时器t3插入至定时器t4和定时器t5之间,并将定时器t3的超时时间重新设置为86414000(00:00:14.000 1days)。
71.在经过3)-4)后,目标任务的定时器链表如表3所示:
72.定时器超时时间t486412000(00:00:12.000 1days)t386414000(00:00:14.000 1days)t586415000(00:00:15.000 1days)
73.表3
74.7)将定时器t4作为当前定时器。
75.8)将定时器t4与系统当前时间进行比较,由于定时器t4的超时时间大于系统当前时间,则确定定时器t4未超时;将定时器t4的超时时间与系统当前时间相减,得到定时器t4的剩余定时时长为1s,因此,将1s作为事务等待期的最大等待时长。
76.9)进入事务等待期,在进入事务等待期1s后,从表3的首个定时器开始查询。
77.上述可知,在处理完目标任务的事务时,在进入等待事务触发的时期之前,通过查询目标任务的定时器链表,并在定时器链表中查询到未超时的定时器的情况下,确定查询到的最快超时的定时器的剩余定时时长,并将该最快超时的定时器的剩余定时时长作为事务等待期的最大等待时长后,进入任务等待期。一个任务对应一个定时器链表,各任务通过查询自身的定时器链表即可确定定时器是否超期,并在定时器超期时自行执行定时器回调函数,由于是在处理完事务后并在进入等待事务触发的时期之前执行查询定时器的操作,因而不会造成数据访问冲突;另外,在查询到最快超时的定时器时将该最快超时的定时器的剩余定时时长作为等待事务触发的时期的最大等待时长,使得任务在进入等待事务触发的时期后能在该定时器超时之前从等待事务触发的时期中唤醒,从而及时对定时器进行处理,保证定时器链表中的定时器能准时触发运行。
78.上述介绍了本技术的方法,为了更好地实施本技术的方法,接下来介绍本技术的
装置。
79.参见图2,图2是本技术实施例提供的一种定时器管理装置的结构示意图,该定时器管理装置可以为嵌入式系统或嵌入式系统的一部分。如图2所示,该定时器管理装置20包括:
80.查询模块201,用于在处理完目标任务的事务,进入所述目标任务的事务等待期之前,查询所述目标任务的定时器链表,所述事务等待期为等待事务触发的时期,所述定时器链表用于管理所述目标任务的定时器的信息,所述定时器的信息包括定时器对应的事务和超时时间,一个任务对应一个定时器链表;
81.执行模块202,用于在查询到超时的定时器的情况下,执行所述超时的定时器对应的事务;
82.超时时长确定模块203,用于在查询到未超时的定时器的情况下,确定目标定时器的剩余定时时长,所述目标定时器为查询到的最快超时的定时器;
83.等待时长确定模块204,用于将所述剩余定时时长作为所述事务等待期的最大等待时长,进入所述事务等待期,在进入所述事务等待期的时长大于或等于所述最大等待时长的情况下,唤醒所述查询模块执行所述查询所述目标任务的定时器链表的步骤。
84.在一种可能的设计中,上述查询模块201具体用于:从i=1开始,将所述定时器链表中的第i个定时器作为当前定时器,判断所述当前定时器是否超时;若所述当前定时器未超时,将所述当前定时器确定为所述目标定时器,触发超时时长确定模块203执行所述确定目标定时器的剩余定时时长的步骤;若所述当前定时器超时,触发执行模块202执行所述当前定时器对应的事务,并将第(i+1)个定时器作为所述当前定时器,执行所述判断所述当前定时器是否超时的步骤,直至执行完所述定时器链表中所有已经超时的定时器对应的事务。
85.在一种可能的设计中,所述定时器的信息还包括是否为周期运行的定时器;上述查询模块201还用于:若所述当前定时器为周期运行的定时器,确定所述当前定时器下次超时的超时时间,按当前定时器下次超时的超时时间,将所述当前定时器插入到所述定时器链表中。
86.在一种可能的设计中,上述查询模块201具体用于:若所述当前定时器的超时时间小于或等于系统当前时间,则确定所述当前定时器超时;若所述当前定时器的超时时间大于所述系统当前时间,则确定所述当前定时器未超时。
87.在一种可能的设计中,上述查询模块201还用于:在所述定时器链表中不存在定时器的情况下,触发进入事务等待期。
88.在一种可能的设计中,上述执行模块202还用于:在获取到所述目标任务的待处理事务的情况下,对所述待处理事务进行处理,并在处理结束后,触发查询模块201执行所述查询所述目标任务的定时器链表的步骤。
89.需要说明的是,图2对应的实施例中未提及的内容可参见前述图1方法实施例的描述,这里不再赘述。
90.上述装置,在处理完目标任务的事务时,在进入等待事务触发的时期之前,通过查询目标任务的定时器链表,并在定时器链表中查询到未超时的定时器的情况下,确定查询到的最快超时的定时器的剩余定时时长,并将该最快超时的定时器的剩余定时时长作为事
务等待期的最大等待时长后,进入任务等待期。一个任务对应一个定时器链表,各任务通过查询自身的定时器链表即可确定定时器是否超期,并在定时器超期时自行执行定时器回调函数,由于是在处理完事务后并在进入等待事务触发的时期之前执行查询定时器的操作,因而不会造成数据访问冲突;另外,在查询到最快超时的定时器时将该最快超时的定时器的剩余定时时长作为等待事务触发的时期的最大等待时长,使得任务在进入等待事务触发的时期后能在该定时器超时之前从等待事务触发的时期中唤醒,从而及时对定时器进行处理,保证定时器链表中的定时器能准时触发运行。
91.参见图3,图3是本技术实施例提供的一种计算机设备的结构示意图,该计算机设备30包括处理器301、存储器302。处理器301连接到存储器302,例如处理器301可以通过总线连接到存储器302。
92.处理器301被配置为支持该计算机设备30执行上述方法实施例中的方法中相应的功能。该处理器301可以是中央处理器(central processing unit,cpu),网络处理器(network processor,np),硬件芯片或者其任意组合。上述硬件芯片可以是专用集成电路(application specific integrated circuit,asic),可编程逻辑器件(programmable logic device,pld)或其组合。上述pld可以是复杂可编程逻辑器件(complex programmable logic device,cpld),现场可编程逻辑门阵列(field-programmable gate array,fpga),通用阵列逻辑(generic array logic,gal)或其任意组合。
93.存储器302用于存储程序代码等。存储器302可以包括易失性存储器(volatile memory,vm),例如随机存取存储器(random access memory,ram);存储器302也可以包括非易失性存储器(non-volatile memory,nvm),例如只读存储器(read-only memory,rom),快闪存储器(flash memory),硬盘(hard disk drive,hdd)或固态硬盘(solid-state drive,ssd);存储器302还可以包括上述种类的存储器的组合。
94.处理器301可以调用所述程序代码以执行以下操作:
95.在处理完目标任务的事务,进入所述目标任务的事务等待期之前,查询所述目标任务的定时器链表,所述事务等待期为等待事务触发的时期,所述定时器链表用于管理所述目标任务的定时器的信息,所述定时器的信息包括定时器对应的事务和超时时间,一个任务对应一个定时器链表;
96.在查询到超时的定时器的情况下,执行所述超时的定时器对应的事务;
97.在查询到未超时的定时器的情况下,确定目标定时器的剩余定时时长,所述目标定时器为查询到的最快超时的定时器,将所述剩余定时时长作为所述事务等待期的最大等待时长,进入所述事务等待期;
98.在进入所述事务等待期的时长大于或等于所述最大等待时长的情况下,唤醒执行所述查询所述目标任务的定时器链表的步骤。
99.本技术实施例还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被计算机执行时使所述计算机执行如前述实施例所述的方法。
100.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁
碟、光盘、只读存储记忆体(read-only memory,rom)或随机存储记忆体(random access memory,ram)等。
101.以上所揭露的仅为本技术较佳实施例而已,当然不能以此来限定本技术之权利范围,因此依本技术权利要求所作的等同变化,仍属本技术所涵盖的范围。
技术特征:
1.一种定时器管理方法,其特征在于,包括:在处理完目标任务的事务,进入所述目标任务的事务等待期之前,查询所述目标任务的定时器链表,所述事务等待期为等待事务触发的时期,所述定时器链表用于管理所述目标任务的定时器的信息,所述定时器的信息包括定时器对应的事务和超时时间,一个任务对应一个定时器链表;在查询到超时的定时器的情况下,执行所述超时的定时器对应的事务;在查询到未超时的定时器的情况下,确定目标定时器的剩余定时时长,所述目标定时器为查询到的最快超时的定时器,将所述剩余定时时长作为所述事务等待期的最大等待时长,进入所述事务等待期;在进入所述事务等待期的时长大于或等于所述最大等待时长的情况下,唤醒执行所述查询所述目标任务的定时器链表的步骤。2.根据权利要求1所述的方法,其特征在于,所述定时器在所述定时器链表中按超时时间升序排列;所述查询所述目标任务的定时器链表,包括:从i=1开始,将所述定时器链表中的第i个定时器作为当前定时器,判断所述当前定时器是否超时;所述在查询到未超时的定时器的情况下,确定目标定时器的剩余定时时长,包括:若所述当前定时器未超时,将所述当前定时器确定为所述目标定时器,并确定目标定时器的剩余定时时长;所述在查询到超时的定时器的情况下,执行所述超时的定时器对应的事务,包括:若所述当前定时器超时,执行所述当前定时器对应的事务,并将第(i+1)个定时器作为所述当前定时器,执行所述判断所述当前定时器是否超时的步骤,直至执行完所述定时器链表中所有已经超时的定时器对应的事务。3.根据权利要求2所述的方法,其特征在于,所述定时器的信息还包括是否为周期运行的定时器;所述执行所述当前定时器对应的事务之后,还包括:若所述当前定时器为周期运行的定时器,确定所述当前定时器下次超时的超时时间,按所述当前定时器下次超时的超时时间,将所述当前定时器插入到所述定时器链表中。4.根据权利要求2所述的方法,其特征在于,所述判断所述当前定时器是否超时,包括:若所述当前定时器的超时时间小于或等于系统当前时间,则确定所述当前定时器超时;若所述当前定时器的超时时间大于所述系统当前时间,则确定所述当前定时器未超时。5.根据权利要求3所述的方法,其特征在于,所述方法还包括:若所述当前定时器超时且所述当前定时器为非周期运行的定时器,从所述定时器链表中移除所述当前定时器的信息。6.根据权利要求1所述的方法,其特征在于,所述方法还包括:在所述定时器链表中不存在定时器的情况下,进入所述事务等待期。7.根据权利要求1-5任一项所述的方法,其特征在于,所述进入所述事务等待期之后,还包括:
在获取到所述目标任务的待处理事务的情况下,对所述待处理事务进行处理,并在处理结束后,执行所述查询所述目标任务的定时器链表的步骤。8.一种定时器管理装置,其特征在于,包括:查询模块,用于在处理完目标任务的事务,进入所述目标任务的事务等待期之前,查询所述目标任务的定时器链表,所述事务等待期为等待事务触发的时期,所述定时器链表用于管理所述目标任务的定时器的信息,所述定时器的信息包括定时器对应的事务和超时时间,一个任务对应一个定时器链表;执行模块,用于在查询到超时的定时器的情况下,执行所述超时的定时器对应的事务;超时时长确定模块,用于在查询到未超时的定时器的情况下,确定目标定时器的剩余定时时长,所述目标定时器为查询到的最快超时的定时器;等待时长确定模块,用于将所述剩余定时时长作为所述事务等待期的最大等待时长,进入所述事务等待期,在进入所述事务等待期的时长大于或等于所述最大等待时长的情况下,唤醒所述查询模块执行所述查询所述目标任务的定时器链表的步骤。9.一种计算机设备,其特征在于,包括存储器以及处理器,所述处理器用于执行存储在所述存储器中的一个或多个计算机程序,所述处理器在执行所述一个或多个计算机程序时,使得所述计算机设备实现如权利要求1-7任一项所述的方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令当被处理器执行时使所述处理器执行如权利要求1-7任一项所述的方法。
技术总结
本申请提供定时器管理方法、装置、设备及存储介质,其中,方法包括:在处理完目标任务的事务,进入目标任务的事务等待期之前,查询目标任务的定时器链表,定时器链表用于管理目标任务的定时器的信息,定时器的信息包括定时器对应的事务和超时时间;在查询到超时的定时器的情况下,执行超时的定时器对应的事务;在查询到未超时的定时器的情况下,确定目标定时器的剩余定时时长,目标定时器为查询到的最快超时的定时器,将剩余定时时长作为事务等待期的最大等待时长,进入事务等待期;在进入事务等待期的时长大于或等于最大等待时长的情况下,执行查询目标任务的定时器链表的步骤。该技术方案可避免造成数据访问冲突,并保证定时器准时触发运行。时触发运行。时触发运行。
技术研发人员:黄清楼
受保护的技术使用者:深圳市晨北科技有限公司
技术研发日:2021.11.26
技术公布日:2022/3/8