CN1366416A - 一种定时器调度方法 - Google Patents
一种定时器调度方法 Download PDFInfo
- Publication number
- CN1366416A CN1366416A CN 02104829 CN02104829A CN1366416A CN 1366416 A CN1366416 A CN 1366416A CN 02104829 CN02104829 CN 02104829 CN 02104829 A CN02104829 A CN 02104829A CN 1366416 A CN1366416 A CN 1366416A
- Authority
- CN
- China
- Prior art keywords
- timer
- duration
- chained list
- scheduling method
- classification
- 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
- Data Exchanges In Wide-Area Networks (AREA)
- Measurement Of Predetermined Time Intervals (AREA)
Abstract
一种定时器调度方法,是指将定时器的超时时长按照一定的数学进位制进行拆分,如采用二进制时就是将时长拆分成若干个2k相加的形式,而定时器类别链表则按照所选定的数学进位制进行分类,其具体步骤为:按照数学进位制确定定时器的超时时长的最高有效位,并将该定时器登记到最高有效位所对应定时器类别链表的尾部;当定时器在该链表中的拆分时长到时,取出该定时器,再次按照所选定的数学进位制确定剩余时长的最高有效位,并登记到相应链表的尾部,直至该定时器超时,则启动该定时器的超时任务,并删除该定时器。所述最高有效位是指超时时长表示成选定的数学进位制相加形式时的最高次幂,且该最高有效位确定拆分时长。
Description
技术领域
本发明涉及一种定时器的调度方法,尤其是指一种在通讯系统中处理大话务量负载时的海量定时器调度方法。
背景技术
在现代通讯系统中,巨大数量的用户极其频繁地发起长短不一的呼叫,呼叫中许多特殊状态的定时器精度要求非常高,有些状态(例如通话状态等)的时长要求非常长,可能长达数小时或更长。在极限情况下,呼叫速度可以达到每秒数百次,每个呼叫过程中都会数次启动和中止定时器,这样每秒钟定时器的启动次数以及中止和超时次数就可能达到数千次。因此,需要有高效而通用的定时器调度方法。现有的定时器调度方法主要有以下几种:
(1)轮询定时器调度方法
轮询定时器调度方法是一种常用于少量定时器的调度方法,如附图1所示,每一个小方框代表一个定时器,该调度方法是在每个滴答(或者称为tick)把定时器队列扫描一遍,即把所有的定时器检查一遍,看看是否有定时器超时,并且把每个定时器的剩余时间减一。所谓tick是指定时器调度程序扫描定时器队列的周期(以下同)。如果在tick非常短的情况下,这种方法不能在一个tick内检查太多定时器。
(2)差分定时器调度方法
所谓差分定时器调度方法把定时器按照到时时刻排列成一个长链,每个定时器记录自身到时时该与上一个定时器到时时间的时间差,如附图2所示,该调度方法几乎没有扫描开销,判断是否有定时器超时,只需判断链表头的第一个定时器即可。但是如果插入一个新的定时器,就需要遍历链表,当处于激活状态的定时器数量非常大的时候,插入过程就会慢的无法接受,尤其在插入非常频繁的情况下。这种方案只能应用于定时器数量巨大,但是插入和删除并不频繁,平均定时时长比较短的情况下尚可。
(3)分类定时器调度方法
有些通讯系统中采用了定时器时长分类的方法,系统根据所用到的定时时长将定时器进行分类,针对每个长度的定时器构造一个链表,如附图3所示的分类定时器调度方法,系统将定时器根据定时时长120tick、200tick和800tick分别构造了a、b、c三类链表,当判断是否有定时器超时,只需在每个tick内扫描定时器链表中的第一个定时器即可。由于每个链表只有一种定时时延,新登记的定时器可以直接插入该定时器所属定时器类的链表尾部,如附图4所示,当新增加的定时器时长为200tick时,只需要直接插入到定时时长为200tick的链表b中。这种方法利用了差分定时器的优点,并且针对系统的特殊性克服了差分定时器在插入效率上的缺点。当定时器时长的种类很少时,这种调度方法非常高效,但是这种定时器只能应付定时器时长的可能取值有限的情况,对于超时时长可能取值种类过多或者可变的系统是不适用的。
以上所述现有的定时器调度方法在调度上万甚至上百万个定时器时通常不能同时解决下列问题:(1)高效扫描大量处于激活状态的定时器,执行超时的定时器任务;(2)高效插入、删除定时器;(3)可提供的定时时延范围足够大,应用程序不必对特殊长度的时延进行特殊处理;(4)定时的精度足够高,满足精确定时的需要。另外,对于实时系统,定时器调度方案还必须使系统能够长期稳定地工作,通常不可以动态地分配和释放内存,以免造成内存碎片化;同时,定时器调度方法最好能够通用。许多系统实现了不同精度不同长度的几类定时器,或者为某些特定时长的定时器进行了优化,所有这些方案都会增大调度程序总的复杂性,增大应用程序使用定时任务的难度,降低系统的可靠性。现在通讯系统的容量越来越大,速度越来越高,协议越来越复杂,稳定性要求也越来越高,对这种即通用又高效的海量定时器调度方法的需求变得愈发迫切。
发明内容
为解决上述缺点,本发明的目的在于提供一种通用而高效的定时器调度方法,该方法能实现高效扫描和高效插入、删除定时器,并能提供足够大的定时时延和足够高的精度。
本发明的目的是这样实现的:
一种定时器调度方法,其步骤包括:(1)按照数学进位制确定该定时器的超时时长的最高有效位;(2)将该定时器登记到最高有效位所对应类别链表的尾部;(3)当定时器在该链表中超时,取出该定时器,再次按照所选定的数学进位制确定剩余时长的最高有效位,并登记到相应链表的尾部;(4)当该定时器的超时,启动该定时器的超时任务,并删除该定时器。
该定时器调度方法还包括扫描过程,该扫描过程是指系统从最小时长类别的链表开始循环处理每个类别的链表,包括以下步骤:(a)判断当前链表中是否还有定时器,若无则扫描下一个链表,否则读取本链表头部的定时器;(b)判断该读取的定时器在本链表中的拆分时长是否到时,若未到时则扫描下一个链表,否则执行下一个步骤;(c)判断该定时器是否超时,若超时则执行步骤(4),否则执行步骤(3);(d)返回步骤(b)。
其中,所述定时器类别链表按照所选定的数学进位制分类。
附图说明
图1为现有技术轮询定时器调度方法的示意图。
图2为现有技术差分定时器调度方法的示意图。
图3为现有技术分类定时器调度方法的示意图。
图4为图3所示方法的插入定时器的示意图。
图5为本发明拆分定时器调度方法的示意图。
图6、7为图5所示方法的插入定时器的示意图。
图8为本发明方法定时器扫描的流程图。
具体实施方式
本发明定时器调度方法是在前面所述的差分定时器调度方法和分类定时器调度方法的基础上,引入时长拆分的概念。
根据前面所述,差分定时器调度方法的缺点在于插入速度太慢,需要扫描链表。分类定时器调度方法的缺点在于不能处理任意时长,提供的时长类别也不能过多,如果需要定时的时长随机地分布在一个很大的范围内,不可能为每个时长都提供一个类别。但是实际上并不需要为所有的时长准备一个类别,许多时长是可以通过其他的时长相加组合而来。例如你有了时长为3以及时长为5的时长类别,那么你就可以直接组合出时长为8的定时间隔。方法很简单,先启动一个时长为3的定时器,超时的时候立即启动一个时长为5的定时器,这个时长为5的定时器超时的时候,正好经过了8个tick。基于此,我们可以设定一些有规律的时长类别,将具体的时长都拆分成这些时长类别相组合后再进行扫描处理,即本发明所述时长拆分。所谓时长拆分就是将定时器的超时时长按照一定的数学进位制进行拆分。
本发明在最佳实施方式中采用了二进制对时长进行拆分,二进制时长拆分方法就是把每一个时长都表示成若干个2k相加的形式,2k就表示一个时长类别,每一个时长类别组成一个链表。因此可以提供的定时类别可以只有1,2,4,8,...,2k,...,k+1即是定时类别的个数(k从0开始计数),也是链表的个数。这样,本发明的系统仅仅需要定时时长为1,2,4,8,...,2k,...的定时类别链表。对于32位系统,如果使用32位整数作为时长的类型,则只需要32个时长类别链表,每个链表对应一个k值(k=0,1,2,...,31),最差情况只需要把一个定时器时长拆分32次,实际上每次拆分只需要极短的时间,这个开销完全是微不足道的。当然,如果时长正好等于2k,则不用拆分。该32位系统可以处理时长达40亿之巨,完成可以满足特殊长度的时长要求。为叙述和附图说明的方便,本实施方式中采用8个链表的系统进行说明,如附图5所示,在该8个链表的系统中,k=0,1,2,...,7,时长类别为20、21、22、23、24、25、26和27八个,对应的链表分别记为0,1,2,...,7。
当要插入一个定时器时,首先需要计算该定时器的到时时刻,即定时器的时长N;确定好定时器的定时长N后,需要确定定时器的二进制最高有效位,所述最高有效位是指时长可以表示成数学进位制相加形式时的最高次幂,若N表示成2k相加的形式,即N=1+2+4+,...,+2k,其最高次幂k就是N的最高有效位;与分类定时器调度方法相同,要插入该时长为N的定时器,只需要先把该定时器登记到最高有效位k所对应的链表k的尾部即可。许多CPU直接支持位扫描指令,这条指令可以直接确定一个整数的最高或最低有效位,因此可以直接利用这个指令确定一个时长为N的定时器应当登记到哪一个定时器链表中去。即使没有这个指令,通过移位运算确定这个上标也是非常快速的,不过几十个CPU时钟周期而已。当该时长为N的定时器在链表k中超时,就需要再确定剩余时长N-2k的最高有效位,再将该定时器登记到剩余时长N-2k的最高有效位所对应的链表的尾部,以此类推,直到该定时器的时长为0。
例如,对于时长22,其二进制表示为00010110,即在二进制表示中的位置为第1、2、4位,其最高有效位上标为4,该时长22采用二进制进行时长拆分可以表示为22=24+22+21,即可以拆分为时长类别为21、22和24的组合。在进行定时器扫描时,首先找到时长22的最高有效位4,将该定时器登记到最高有效位时长类别24的定时器链表4的尾部,如附图6所示;16个tick之后,该定时器在当前的链表(时长类别为24)中超时并且被取出,此时该定时器距离真正应该超时的时间还剩下6个tick;此时立即找到剩下6个tick里的最高有效位2,并把它登记到时长类别22的定时器链表2的尾部,如附图7所示;又经过了4个tick之后该定时器在当前链表(时长类别为为4)中超时并且被取出;此时再次立即找到剩下2个tick里的最高有效位1,并把它登记到时长类别21的定时器链表1的尾部。当时长为2的定时器再次超时的时候,该定时器才真正经过了22个tick,此时运行这个定时器对应的超时任务,且将该定时器自链表中删除。
当需要判断是否有定时器超时,只需要在每个tick扫描每个类别链表的第一个定时器即可,其扫描流程如附图8所示。系统从最小时长类别的定时器链表20开始循环处理每一个类别的链表,并同时开始进行tick的计数,如步骤20与步骤22所示。其次判断该时长类别的链表中是否还有定时器,如步骤23所示,如果没有则返回步骤22扫描下一个时长类别的定时器链表;否则取出该链表头部的定时器,如步骤24所示,并判断该取出的定时器登记到本链表中的拆分时长是否到时,如步骤25所示,该拆分时长与本链表的时长类别相等,例如前面所述的时长为22的定时器首先拆分登记到时长类别为24的链表中,在进行定时器扫描时,就要判断是否该定时器是否已达到拆分时长16个tick,即是否到时。由于每个链表中登记的定时器的拆分时长是一样的,且每次定时器要插入时都是登记在该链表的尾部,所以越往头部则定时器所剩余的拆分时长越短或相等,故每次扫描时只需要检查头部的定时器是否超时即可。如果没有到时则返回步骤22扫描下一个时长类别的定时器链表,否则就要判断该定时器是否实际到时,如步骤26所示,所谓实际到时就是指是否到达了整个时长,如时长22的定时器是否已经过了22个tick,如果没有实际到时,则将该定时器自本链表中取出,再确定其剩余时长的最高有效位,重新将该定时器插入到剩余时长的最高有效位对应的链表中,如步骤27所示,如前述时长为22的定时器,当在类别为24的链表中到时,但还没有实际到时,所以再确定其剩下6个tick里的最高有效位所在位置的上标2,并把它登记到时长类别22的定时器链表2的尾部;否则启动该定时器的超时任务,并删除该定时器,即清空该定时器链节,并将该定时器链节自链表中断开,如步骤28所示;经过步骤27或28以后,返回到步骤23继续扫描,直到扫描完所有的链表。
本发明方法还可以采取三进制对时长进行拆分,比如时长22可以用三进制拆分表示为22=2×32+1×31+1×30。当然还可以采用其他进位制。
本发明所述的拆分定时器调度方法,本身造成的开销非常低,能够对于不同时长和精度的定时器都能够统一处理,有效地降低了系统的复杂程度,提高了可移植性和可维护性。
Claims (9)
1、一种定时器调度方法,其步骤包括:(1)按照数学进位制确定定时器的超时时长的最高有效位,该最高有效位确定拆分时长;(3)将该定时器登记到最高有效位所对应定时器类别链表的尾部;(3)当定时器在该链表中的拆分时长到时,取出该定时器,再次按照所选定的数学进位制确定剩余时长的最高有效位,并登记到相应链表的尾部;(4)当该定时器超时,启动该定时器的超时任务,并删除该定时器。
2、如权利要求1所述的定时器调度方法,其特征在于:还包括扫描过程,该扫描过程是指系统从最小时长类别的链表开始循环处理每个类别的链表,包括以下步骤:(a)判断当前链表中是否还有定时器,若无则扫描下一个链表,否则读取本链表头部的定时器;(b)判断该读取的定时器在本链表中的拆分时长是否到时,若未到时则扫描下一个链表,否则执行下一个步骤;(c)判断该定时器是否超时,若超时则执行步骤(4),否则执行步骤(3);(d)返回步骤(b)。
3、如权利要求1所述的定时器调度方法,其特征在于:所述定时器类别链表按照所选定的数学进位制分类。
4、如权利要求1所述的定时器调度方法,其特征在于:所述的数学进位制为二进制。
5、如权利要求1所述的定时器调度方法,其特征在于:所述的数学进位制为三进制。
6、如权利要求1所述的定时器调度方法,其特征在于:所述最高有效位是指超时时长表示成选定的数学进位制相加形式时的最高次幂。
7、如权利要求1所述的定时器调度方法,其特征在于:所述的超时时长是指所述定时器的实际全部的时长。
8、如权利要求1所述的定时器调度方法,其特征在于:所述拆分时长与所述的链表的时长类别相等。
9、如权利要求1所述的定时器调度方法,其特征在于:所述删除定时器是指清空该定时器链节,并将该定时器链节自链表中断开。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB021048290A CN1159899C (zh) | 2002-02-08 | 2002-02-08 | 一种定时器调度方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB021048290A CN1159899C (zh) | 2002-02-08 | 2002-02-08 | 一种定时器调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1366416A true CN1366416A (zh) | 2002-08-28 |
CN1159899C CN1159899C (zh) | 2004-07-28 |
Family
ID=4740126
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB021048290A Expired - Fee Related CN1159899C (zh) | 2002-02-08 | 2002-02-08 | 一种定时器调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1159899C (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100358295C (zh) * | 2005-07-06 | 2007-12-26 | 华为技术有限公司 | 一种定时器调度方法 |
CN101853047A (zh) * | 2010-05-18 | 2010-10-06 | 瑞斯康达科技发展股份有限公司 | 一种定时器实现方法及装置 |
CN106844043A (zh) * | 2016-12-29 | 2017-06-13 | 北京五八信息技术有限公司 | 集群任务的处理方法和装置 |
CN107015849A (zh) * | 2017-04-07 | 2017-08-04 | 北京奇虎科技有限公司 | 定时任务的提醒方法及装置 |
CN110908429A (zh) * | 2018-09-18 | 2020-03-24 | 阿里巴巴集团控股有限公司 | 一种定时器操作方法及装置 |
-
2002
- 2002-02-08 CN CNB021048290A patent/CN1159899C/zh not_active Expired - Fee Related
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100358295C (zh) * | 2005-07-06 | 2007-12-26 | 华为技术有限公司 | 一种定时器调度方法 |
CN101853047A (zh) * | 2010-05-18 | 2010-10-06 | 瑞斯康达科技发展股份有限公司 | 一种定时器实现方法及装置 |
CN106844043A (zh) * | 2016-12-29 | 2017-06-13 | 北京五八信息技术有限公司 | 集群任务的处理方法和装置 |
CN107015849A (zh) * | 2017-04-07 | 2017-08-04 | 北京奇虎科技有限公司 | 定时任务的提醒方法及装置 |
CN107015849B (zh) * | 2017-04-07 | 2020-12-04 | 北京奇虎科技有限公司 | 定时任务的提醒方法及装置 |
CN110908429A (zh) * | 2018-09-18 | 2020-03-24 | 阿里巴巴集团控股有限公司 | 一种定时器操作方法及装置 |
CN110908429B (zh) * | 2018-09-18 | 2023-12-05 | 阿里巴巴集团控股有限公司 | 一种定时器操作方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN1159899C (zh) | 2004-07-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5157620A (en) | Method for simulating a logic system | |
Carmon et al. | Group set-up for printed circuit board assembly | |
CN87100829A (zh) | 用于检索的方法和装置 | |
WO2003012689A1 (en) | Method for fast searching and analyzing inter-relations between patents from a patent database | |
CN101162471B (zh) | 一种插入排序的方法和装置 | |
KR100422132B1 (ko) | 실시간 시스템의 씨피유 타스크 점유율 측정장치 | |
CN106909554B (zh) | 一种数据库文本表数据的加载方法及装置 | |
US5394549A (en) | Task spawning responsive to relational database conditions and operations | |
CN1159899C (zh) | 一种定时器调度方法 | |
EP1412764B1 (en) | System and method for waveform processing | |
CN116737482A (zh) | 一种芯片测试数据的实时收集方法、装置及电子设备 | |
CN1332548C (zh) | 海量定时器的调度方法 | |
EP0589662A2 (en) | Digital signal processing system | |
CN117076353B (zh) | 描述符的配置方法和描述符的配置装置 | |
CN104182360A (zh) | 多核环境的跟踪日志输出处理方法及系统 | |
CN1316772A (zh) | 基于事件的测试系统的延迟时间插入 | |
CN111309475B (zh) | 一种检测任务执行方法及设备 | |
US6708197B1 (en) | Method of driving timer in an advanced intelligent network switching system employing the thread call structure under UNIX system | |
Dannenberg | A Real Time Scheduler/Dispatcher | |
CN113159602A (zh) | 任务的派发方法、装置、设备及可读存储介质 | |
Bahr et al. | Smart priority queue algorithms for self-optimizing event storage | |
CN110875951B (zh) | 一种调用消息并发量的统计方法及装置 | |
Osogami et al. | A recursive analysis technique for multi-dimensionally infinite Markov chains | |
EP1061463A2 (en) | Scheduling non-integral simulation time for mixed-signal simulation | |
US7430214B2 (en) | Circuit, method and program for data queue control |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C06 | Publication | ||
PB01 | Publication | ||
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: 20040728 Termination date: 20170208 |
|
CF01 | Termination of patent right due to non-payment of annual fee |