CN1713630A - 一种触发相对定时器的方法 - Google Patents
一种触发相对定时器的方法 Download PDFInfo
- Publication number
- CN1713630A CN1713630A CN 200410049887 CN200410049887A CN1713630A CN 1713630 A CN1713630 A CN 1713630A CN 200410049887 CN200410049887 CN 200410049887 CN 200410049887 A CN200410049887 A CN 200410049887A CN 1713630 A CN1713630 A CN 1713630A
- Authority
- CN
- China
- Prior art keywords
- timer
- scale
- chain
- time wheel
- wheel
- 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.)
- Granted
Links
Images
Landscapes
- Measurement Of Unknown Time Intervals (AREA)
Abstract
本发明公开了一种触发相对定时器的方法,该方法预先在系统中设置一个时间轮,以系统定时任务周期为单位刻度,并在该时间轮上设置一个循环指针。当上层应用需要定时任务时,只需将该定时器直接挂入时间轮中即可;而当定时器触发时,则直接触发挂在时间轮中循环指针变量所指当前刻度上的定时器。本发明避免了传统的定时器注册和触发方法中必须从等待队列队首开始逐一进行定时检查的过程,从而提高了系统执行定时任务的效率。
Description
技术领域
本发明涉及一种实时系统定时任务的处理方法,特别是指一种触发相对定时器的方法。
背景技术
在各类通信协议中,存在许多需要定时或周期性处理的事务,定时器是处理这种事务的重要系统资源。定时器有绝对和相对之分,绝对定时描述为特定的时间,相对定时描述为一段时间间隔。在实际应用中,相对定时器的应用更为频繁、广泛。一个实时系统经常会有几十个甚至几百个相对定时器。
实时系统一般都有一个高优先级的由硬件时钟触发的定时任务周期,一般为滴答Tick,它定时激活已注册的定时器,对于超时的定时器则发送定时器消息给该定时器的申请者。定时器触发方法的优劣直接影响整个实时系统的性能。
现有的定时器触发方法一般采用单一的等待队列方法,主要包括注册和触发两个过程,下面分别说明:
(1)注册
在该方法中,用户注册的所有相对定时器,按照其相对时长由短到长的顺序被组成一个等待队列,称为定时器链。每注册一个定时器A,就从该定时器链的链首开始查找,直到找到第一个相对时长大于该定时器A时长的定时器B,然后将A插于B之前。
(2)触发
系统在定时任务中会进行定时器超时检查和触发。由于定时器的注册是根据定时器的相对时长排序的,因此排在定时器链链首的定时器总是最先超时的定时器。所以在对定时器链进行超时检查时,总是先检查第一个定时器,如果第一个定时器未超时,别的定时器就一定不会超时;如果第一个定时器超时,则检查排在后面的定时器,直到找到第一个未超时的定时器为止,超时的定时器会被删除,所有未超时的定时器的时长域将会被修正。
综上所述,无论对定时器进行注册或超时检查,均须从定时器链的链首开始遍历。对于满足超时条件的定时器进行超时处理,对于不满足超时条件的,还需要计算并修正排在链首的定时器的时长域,效率很低,严重影响了系统的实时性。
发明内容
有鉴于此,本发明的主要目的在于提供一种触发相对定时器的方法,以提高系统执行定时任务的效率,进而改善系统的性能。
为了达到上述目的,该方法主要包括以下步骤:
a、设置一个时间轮,该时间轮以系统定时任务周期为单位刻度,并在该时间轮上设置一个循环指针,所述循环指针每隔一个系统定时任务周期向前移动一个单位刻度;
b、定时器注册时,计算该定时器挂入时间轮的刻度,然后根据计算得到的刻度直接挂入该时间轮;
c、定时器触发时,直接触发挂在时间轮循环指针变量所指的当前刻度上的定时器。
在上述方法中,步骤a中定时任务周期为滴答Tick。
在上述方法中,步骤a中时间轮的初始刻度为0。
较佳地,步骤b中在计算该定时器挂入时间轮的刻度之前进一步包括判断要注册的定时器时长是否大于时间轮的最大刻度,如果是,进一步包括将时间轮的最大刻度调整为大于该定时器时长,否则直接执行计算定时器的挂入刻度的步骤。
在上述方法中,步骤b中计算该定时器挂入时间轮的刻度为:对该定时器的定时时长与循环指针变量所指的当前刻度求和,然后用得到的值对该时间轮的最大刻度值取模。
在上述方法中,步骤c之后进一步包括:当不再需要某一定时器时,将该定时器从时间轮中删除。
在上述方法中,步骤a中进一步包括设置一个大于时间轮最大刻度的时间轮极限刻度的步骤;
步骤b中在计算定时器挂入时间轮的刻度之前进一步包括:
b1、判断要注册的定时器的时长是否小于时间轮极限刻度;如果是,进一步判断定时器时长是否大于时间轮最大刻度,如果是,进一步包括将时间轮的最大刻度调整为大于该定时器时长,否则直接执行计算定时器的挂入刻度的步骤;如果要注册的定时器的时长大于时间轮极限刻度,进一步判断该定时器是否是第一个在系统中存放定时器的定时器链结构中注册的定时器,如果是,则将该定时器直接放在定时器链链首,否则从定时器链的链首开始,与定时器链中已经注册了的定时器的相对时长进行比较,直到找到第一个相对时长大于要注册的定时器的时长的定时器,然后将要注册的定时器插于该定时器之前,如果定时器链中所有定时器的时长都小于要注册的定时器的时长,则将要注册的定时器放于定时器链链尾;
步骤c之后进一步包括:
d、判断排在定时器链链首的定时器是否超时,如果超时,从链首顺序判断定时器链中的每一个定时器是否超时,直到判断出第一个未超时的定时器,然后删除所有超时的定时器,并修正所有未超时的定时器的时长域;如果排在定时器链链首的定时器未超时,直接结束本流程。
综上所述,本发明通过在系统中设置一个时间轮来对系统中的定时器进行注册和触发,避免了传统的定时器注册和触发方法中必须从等待队列队首开始逐一作定时检查的过程,显著提高了系统执行定时任务的效率,缩短了执行周期,进而改善了系统性能。
附图说明
图1为本发明具体实施例一的流程图;
图2为本发明具体实施例二中定时器注册的流程图;
图3为本发明具体实施例二中定时器触发的流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细说明。
实施例一
在系统有足够空间的情况下,本实施例流程如图1所示,具体包含以下步骤:首先在步骤101,在系统中设置一个时间轮,该时间轮以系统定时任务周期为单位刻度,初始刻度为0,预先设置一个最大刻度,该最大刻度大于系统中所有相对定时器的定时时长,如果在系统执行定时任务时,有新的定时器的时长超过了预先设置的时间轮的最大刻度,则调整时间轮的最大刻度,使最大刻度大于该定时器的时长。时间轮上维护一个循环指针,系统每滴答一下,该指针就向前移动一个单位刻度,直到推移到最大刻度,然后回归到0刻度,继而如此循环。
在步骤102,定时器注册时,根据该定时器的时长,采用以下公式计算该定时器应挂入时间轮中的刻度,然后直接挂入即可。
公式:挂入刻度=(定时器时长+循环指针所指的当前刻度)%时间轮最大刻度,其中“%”表示取模。
在步骤103,定时器触发时,系统直接触发挂在时间轮中循环指针所指的当前刻度上的定时器。
实施例二
如果有少数定时器的时长远远大于预先设置的时间轮最大刻度,而由于系统资源条件的限制,使得只能在有限的范围内调整时间轮的最大刻度,这时,定时器注册和触发流程分别如图2、图3所示,定时器注册流程具体包含以下步骤:
在步骤201,首先在系统中设置一个时间轮,该时间轮以系统定时任务周期为单位刻度,初始刻度为0,预先设置一个最大刻度。时间轮上维护一个循环指针,系统每滴答一下,该指针就向前移动一个单位刻度,直到推移到最大刻度,然后回归到0刻度,继而如此循环。
在步骤202,设置一个时间轮极限刻度,该时间轮极限刻度表明了系统所能允许的极限定时时长,该极限刻度因不同的系统而异,但至少大于时间轮最大刻度。
在步骤203,定时器注册时,判断要注册的定时器A的时长是否小于时间轮极限刻度,如果是,则执行步骤204;否则执行步骤205及其后续步骤。
在步骤204,首先调整时间轮的最大刻度,使最大刻度大于该定时器时长,其次根据该定时器的时长,采用以下公式计算该定时器挂入时间轮的刻度,最后直接挂入即可。
公式:挂入刻度=(定时器时长+循环指针所指的当前刻度)%时间轮最大刻度,其中“%”表示取模。
在步骤205~211,定时器注册时,如果该定时器是第一个要在系统中存放定时器的定时器链数据结构中注册的定时器,则将其直接放在定时器链链首,等待触发;当第二个定时器注册时,则将第二个定时器的定时时长与第一个定时器的定时时长进行比较,并按照相对时长有小到大进行排序,当第三个定时器注册时,则与前两个定时器的定时时长相比较,同样按照相对时长有小到大进行排序,其余定时器以此类推。
假设定时器链中排列的定时器个数为N,定时器序号为n,其中n=1,2...N,且n的初始值为1,当有新的定时器A要注册时,就从该定时器链链首(n=1)开始查找,直到找到第一个相对时长大于该定时器A时长的定时器B,然后将A插于B之前,如果定时器链中所有定时器的时长都小于定时器A的时长,则将定时器A放在定时器链链尾。
其次,如图3所示,定时器触发流程具体包含以下步骤:
在步骤301,定时器触发时,直接触发时间轮上循环指针所指的当前刻度上的定时器。
在步骤302~307,检查排在定时器链链首的定时器(n=1)的时长,如果该定时器未超时,别的定时器就一定不会超时,修正所有未超时的定时器的时长域;如果超时,则触发该定时器,并将其从定时器链中删除;继续检查排在后面的定时器,直到找到第一个未超时的定时器为止,修正所有未超时的定时器的时长域。
总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (7)
1、一种触发相对定时器的方法,包括以下步骤:
a、设置一个时间轮,该时间轮以系统定时任务周期为单位刻度,并在该时间轮上设置一个循环指针,所述循环指针每隔一个系统定时任务周期向前移动一个单位刻度;
b、定时器注册时,计算该定时器挂入时间轮的刻度,然后根据计算得到的刻度直接挂入该时间轮;
c、定时器触发时,直接触发挂在时间轮循环指针变量所指的当前刻度上的定时器。
2、根据权利要求1所述的触发相对定时器的方法,其特征在于:步骤a中定时任务周期为滴答Tick。
3、根据权利要求1所述的触发相对定时器的方法,其特征在于:步骤a中时间轮的初始刻度为0。
4、根据权利要求1所述的触发相对定时器的方法,其特征在于:步骤b中在计算该定时器挂入时间轮的刻度之前进一步包括判断要注册的定时器时长是否大于时间轮的最大刻度,如果是,进一步包括将时间轮的最大刻度调整为大于该定时器时长,否则直接执行计算定时器的挂入刻度的步骤。
5、根据权利要求1所述的触发相对定时器的方法,其特征在于:步骤b中计算该定时器挂入时间轮的刻度为:对该定时器的定时时长与循环指针变量所指的当前刻度求和,然后用得到的值对该时间轮的最大刻度值取模。
6、根据权利要求1所述的触发相对定时器的方法,其特征在于:步骤c之后进一步包括:当不再需要某一定时器时,将该定时器从时间轮中删除。
7、根据权利要求1所述的触发相对定时器的方法,其特征在于:步骤a中进一步包括设置一个大于时间轮最大刻度的时间轮极限刻度的步骤;
步骤b中在计算定时器挂入时间轮的刻度之前进一步包括:
b1、判断要注册的定时器的时长是否小于时间轮极限刻度;如果是,进一步判断定时器时长是否大于时间轮最大刻度,如果是,进一步包括将时间轮的最大刻度调整为大于该定时器时长,否则直接执行计算定时器的挂入刻度的步骤;如果要注册的定时器的时长大于时间轮极限刻度,进一步判断该定时器是否是第一个在系统中存放定时器的定时器链结构中注册的定时器,如果是,则将该定时器直接放在定时器链链首,否则从定时器链的链首开始,与定时器链中已经注册了的定时器的相对时长进行比较,直到找到第一个相对时长大于要注册的定时器的时长的定时器,然后将要注册的定时器插于该定时器之前,如果定时器链中所有定时器的时长都小于要注册的定时器的时长,则将要注册的定时器放于定时器链链尾;
步骤c之后进一步包括:
d、判断排在定时器链链首的定时器是否超时,如果超时,从链首顺序判断定时器链中的每一个定时器是否超时,直到判断出第一个未超时的定时器,然后删除所有超时的定时器,并修正所有未超时的定时器的时长域;如果排在定时器链链首的定时器未超时,直接结束本流程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200410049887XA CN100512263C (zh) | 2004-06-25 | 2004-06-25 | 一种触发相对定时器的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB200410049887XA CN100512263C (zh) | 2004-06-25 | 2004-06-25 | 一种触发相对定时器的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1713630A true CN1713630A (zh) | 2005-12-28 |
CN100512263C CN100512263C (zh) | 2009-07-08 |
Family
ID=35719059
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB200410049887XA Expired - Fee Related CN100512263C (zh) | 2004-06-25 | 2004-06-25 | 一种触发相对定时器的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100512263C (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2007076636A1 (fr) * | 2005-12-31 | 2007-07-12 | Zte Corporation | Systeme de gestion et procede de gestion du registre d'horloge dans un systeme logiciel |
CN102752282A (zh) * | 2012-05-30 | 2012-10-24 | 苏州云初网络技术有限公司 | 一种定时器管理模块 |
CN103617072A (zh) * | 2013-10-23 | 2014-03-05 | 上海寰创通信科技股份有限公司 | 基于多队列的定时时间分解处理的定时器实现方法 |
CN104142829A (zh) * | 2014-08-04 | 2014-11-12 | 中国科学院上海高等研究院 | 智能优化操作系统定时器功能的方法及系统 |
CN104503761A (zh) * | 2014-12-30 | 2015-04-08 | 浪潮(北京)电子信息产业有限公司 | 一种利用时间转盘处理定时任务的方法和装置 |
CN106126326A (zh) * | 2016-06-23 | 2016-11-16 | 东软集团股份有限公司 | 定时任务管理方法和装置 |
CN109284189A (zh) * | 2018-09-06 | 2019-01-29 | 福建星瑞格软件有限公司 | 一种批量任务超时高效触发方法及系统 |
CN111143053A (zh) * | 2019-11-15 | 2020-05-12 | 杭州涂鸦信息技术有限公司 | 一种定时任务的调度方法、服务器以及存储装置 |
CN111966505A (zh) * | 2020-10-26 | 2020-11-20 | 成都掌控者网络科技有限公司 | 一种基于时间的触发事件控制方法、装置及存储介质 |
CN113672358A (zh) * | 2020-05-15 | 2021-11-19 | 北京沃东天骏信息技术有限公司 | 定时任务处理方法及装置、系统、电子设备和存储介质 |
-
2004
- 2004-06-25 CN CNB200410049887XA patent/CN100512263C/zh not_active Expired - Fee Related
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101361320B (zh) * | 2005-12-31 | 2011-11-09 | 中兴通讯股份有限公司 | 一种软件系统中定时器的管理系统及管理方法 |
WO2007076636A1 (fr) * | 2005-12-31 | 2007-07-12 | Zte Corporation | Systeme de gestion et procede de gestion du registre d'horloge dans un systeme logiciel |
CN102752282B (zh) * | 2012-05-30 | 2015-07-01 | 苏州云初网络技术有限公司 | 一种定时器管理模块 |
CN102752282A (zh) * | 2012-05-30 | 2012-10-24 | 苏州云初网络技术有限公司 | 一种定时器管理模块 |
CN103617072A (zh) * | 2013-10-23 | 2014-03-05 | 上海寰创通信科技股份有限公司 | 基于多队列的定时时间分解处理的定时器实现方法 |
CN104142829A (zh) * | 2014-08-04 | 2014-11-12 | 中国科学院上海高等研究院 | 智能优化操作系统定时器功能的方法及系统 |
CN104142829B (zh) * | 2014-08-04 | 2017-03-15 | 中国科学院上海高等研究院 | 智能优化操作系统定时器功能的方法及系统 |
CN104503761A (zh) * | 2014-12-30 | 2015-04-08 | 浪潮(北京)电子信息产业有限公司 | 一种利用时间转盘处理定时任务的方法和装置 |
CN106126326A (zh) * | 2016-06-23 | 2016-11-16 | 东软集团股份有限公司 | 定时任务管理方法和装置 |
CN109284189A (zh) * | 2018-09-06 | 2019-01-29 | 福建星瑞格软件有限公司 | 一种批量任务超时高效触发方法及系统 |
CN111143053A (zh) * | 2019-11-15 | 2020-05-12 | 杭州涂鸦信息技术有限公司 | 一种定时任务的调度方法、服务器以及存储装置 |
CN113672358A (zh) * | 2020-05-15 | 2021-11-19 | 北京沃东天骏信息技术有限公司 | 定时任务处理方法及装置、系统、电子设备和存储介质 |
CN111966505A (zh) * | 2020-10-26 | 2020-11-20 | 成都掌控者网络科技有限公司 | 一种基于时间的触发事件控制方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN100512263C (zh) | 2009-07-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1713630A (zh) | 一种触发相对定时器的方法 | |
CN1234218C (zh) | 通信设备中具有等级结构事件的处理方法 | |
EP2368178A1 (en) | Method and system for efficient data synchronization | |
CN87100829A (zh) | 用于检索的方法和装置 | |
CN103019805A (zh) | 一种多线程环境下定时器的设置方法 | |
CN102354289A (zh) | 一种并发事务的调度方法和相关装置 | |
CN1852131A (zh) | 一种定时器调度方法 | |
CN100351799C (zh) | 嵌入式实时操作系统中基于消息对象的任务间通信方法 | |
CN105306581A (zh) | 一种基于路由器和云盘数据同步的方法 | |
JP2006041971A5 (zh) | ||
CN109597588B (zh) | 一种数据存储方法、数据还原方法及装置 | |
CN1755614A (zh) | 定时器的实现方法 | |
CN1538300A (zh) | 一种实现嵌入式实时系统内存泄漏检测和定位的方法 | |
CN1658704A (zh) | 一种gmlc中多目标定位时用户上下文的管理方法 | |
CN1126054C (zh) | 对一个移动通信系统中的并行处理器进行同步的协议 | |
CN1556475A (zh) | 嵌入式实时操作系统中内存释放的方法 | |
CN1870524A (zh) | 网元告警数据获取方法 | |
CN1295614C (zh) | 一种测试用软件计时方法 | |
CN1287290C (zh) | 嵌入式实时操作系统中非缓冲内存动态分配方法 | |
CN101051888A (zh) | 一种基站获得和保持同步的方法 | |
CN1567277A (zh) | 用于减少对处理器的中断次数的控制装置及方法 | |
CN112287200B (zh) | 一种面向多目标的社会公共安全风险数据获取方法 | |
CN1474241A (zh) | 海量定时器的调度方法 | |
CN1852182A (zh) | 一种活动主机数量的检测方法及装置 | |
CN1151433C (zh) | 用中央处理器内部的时间戳记计数器校准实时时钟的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090708 Termination date: 20200625 |
|
CF01 | Termination of patent right due to non-payment of annual fee |