多二叉树循环定时器调度方法

文档序号:7883459阅读:174来源:国知局
专利名称:多二叉树循环定时器调度方法
技术领域
本发明涉及计算机软件技术领域的定时器调度方法,尤其是一种在通讯接入服务器领域中,用于处理多用户接入业务时的多定时器的调度方法。
背景技术
定时器及其对定时事件的处理,是计算机软件开发中的一项常用技术,特别是在系统支撑软件中,此类技术的使用率最高。很多情况下,一个系统中往往会有几万、甚至几十万个定时器,如何高效地调度定时器,是提高支撑软件性能、从而提高整个软件系统性能的关键。
现有技术中,常用的定时器调度方法主要有以下几种1.轮询定时器调度法轮询定时器调度法通常用于系统中只存在少量定时器的情况下,如图1所示,图中的每一个小方框代表一个定时器,该方法是在每个定时周期内将所有定时器队列扫描一遍,然后,把每个定时器的剩余时间减一,看看是否有定时器超时,并触发其中超时的定时器。显然,这种方法在定时周期很短的条件下,能够扫描的定时器数量是非常有限的。
2.差分定时器调度法差分定时器调度法是把定时器按照到时时刻的先后顺序排成一个长链,每一个定时器只记录自己到时时刻与上一个定时器到时时间的时间差,如图2所。示利用这种方法判断是否有定时器超时,只需要判断链头的第一个定时器即可,因此,几乎没有扫描开销,但是,若要插入一个定时器,就需要遍历整个链表,如果遇到链表中定时器的数量很大的情况下,插入过程会非常慢,尤其在插入动作非常频繁的情况下。因此,这种方案只适合于定时器数量巨大,但是插入和删除动作并不频繁的情况下使用。
3.分类定时器调度法分类定时器调度法是将定时器按照定时器的时长进行分类,每一类定时器构造一个链表,如图3所示。其中,将定时器按照定时时长20t、30t、40t分别构造了a、b、c三个链表,当判断是否有定时器超时时,只需在每一个定时周期内扫描定时器链表中的第一个定时器即可。由于每个链表中只有一种定时时延,因此,新定时器也可直接插入它所属定时器类链的尾部。这种方法既利用差分定时器调度方法的优点,同时又针对系统的特殊性,克服了差分定时器调度方法插入效率低的缺点。但由以上描述也可得知,当定时器时长种类很少时,这种方法效率很高,但是它不能应付定时器时长种类过多,或者可变的情况。
4.按2的幂次方分类定时器的调度方法中国知识产权局公开号为1366416的专利《一种定时器调度方法》,就是这种定时器调度方法。它是分类定时器调度方法的一种改进方案,它将定时器按时长1、2、22、...、2k分成K+1类,对每类定时器链的操作同分类定时器调度方法相同。对于时长为2的幂次方的定时器,直接将其插入相应的定时器类链;如果定时器的时长不为2的幂次方,就将这个定时器拆分成多个2的幂次方的和,然后,先将最高次幂的分项插入相应的定时器类链,等这个分项超时后,再把剩余的分项中的最高次幂的分项插入相应类链,依此类推,直到所有的分项都被插入并已超时时,这个定时器也就超时了。如图4所示,k=7,共有8个链表,时长类别为20、21、22、23、24、25、26和27。例如,对于时长为23的定时器,拆分为23=24+22+21+20,首先将这个定时器插入到24链的尾部,当16个定时周期后,又将这个定时器再次插入22链的尾部,再等4个定时周期过后,再次将这个定时器插入21链的尾部,继续等2个定时周期后,最后将这个定时器插入20链的尾部,等一个定时周期后,这个定时器超时触发。这种定时器调度方法有效的解决了分类定时器调度法中不能适合任意长度定时器的难题,但是也引入了一些其它问题1)如果k值比较大,则在每个定时周期内扫描的链过多,从而导致工作效率降低。
2)另一方面,当每一类定时器链链头时长被减成0后,还要对链上的每个定时器都做一次比较,判断是否它所代表的定时器超时,如果不超时,又要在其它链重设相应的定时器,效率较低。
3)对每个不为2的幂次方的定时器,还要拆分成2的幂次方项之和,这也需要一定的系统开销。
因此,这种方法适合于时长为2的幂次方的定时器,并且定时周期不能短,否则扫描开销太大。
从上面所述现有的几种定时器调度法可以看出,定时器调度主要解决下面几个问题1.定时周期一般很短,因此要求每个定时周期的扫描要快,否则系统开销太大;2.新定时器的插入效率要高,但是不能影响扫描,否则也会降低调度效率;3.调度方法要有通用性,适合各种时长的定时器。
上面所述现有定时器调度方法中,轮询法扫描与插入都不快,差分法扫描快插入慢,分类法插入快扫描慢且不通用,2的幂次方法插入快扫描慢,因此,提供一种能全面解决上述三方面问题的定时器调度方法,是目前本领域函待解决的问题。

发明内容
本发明的目的正是为了解决现有的各种定时器调度方法中存在的问题,而提供一种定时器调度方法,该方法采用多二叉树循环定时器调度方法,将定时器组织在多个链表中,并且每个链表是一棵二叉树,从而能够有效解决上面关于定时器调度的三个问题的有效方法,使定时器调度高效、可靠且具有通用性。
本发明提供一种多二叉树循环定时器调度方法,其特征在于,该方法包含以下步骤多二叉数定时器结构的组成将系统中的定时器组织成N个链表,每个链表的结构为一个二叉树;二叉树上的每个节点对应系统中的每个定时器;设置每个节点的左子树上的定时器的定时时长与父节点的定时时长相等;设置每个节点的右子树上的定时器的定时时长大于父节点的定时时长。
对整个多二叉树结构的定时器组合进行循环扫描循环扫描系统中对应于定时器的多二叉树结构;对该树根的定时值做减1操作,如果该树根的定时值减1后为0,则这棵树的树根与其左子树上的定时器超时,从这棵树上修剪掉这些定时器,并触发这些定时器;在多二叉数定时器结构中插入新定时器当系统中有新的定时器W插入时,根据该定时器的定时时长T1、当前扫描位置P、二叉树的总数N,按照公式L=(P+(T1 Mod N))Mod N,计算出新定时器W应插入的二叉树L;按照公式T2=T1/N+1,得出新定时器定时节点的定时值T2;从应当插入新定时器的二叉树L的根节点H开始,沿着其右子树,比较二叉树L的根节点H的定时值与新定时器定时节点的定时值T2,确定新定时器的插入位置。
本发明在继承了差分定时器调度方法扫描快优点的同时,还吸取了分类定时器调度方法插入快的特点,是扫描效率最好的定时器调度方法,而且能够实现在系统中有大量定时器存在时,高效插入新定时器,具有良好通用性的定时器调度方法。


图1是现有技术中的轮询定时器调度法的方框示意图;图2是现有技术中的差分定时器调度法的方框示意图;图3是现有技术中的分类定时器调度法的方框示意图;图4是现有技术中的按2的幂次方分类定时器调度方法的方框示意图;图5是本发明的多二叉树循环定时器调度方法的方框示意图;图6是本发明的总体流程图;图7是本发明的扫描流程图;图8是本发明的插入新定时器的操作流程图。
具体实施例方式
本发明提出的定时器调度方法,是一种多二叉树循环定时器调度方法,将定时器组织在多个链表中,每个链表的结构是一棵二叉树,二叉树的每个节点代表一个定时器。然后,采用循环扫描法对多个链表进行扫描,具体扫描方法是在每个定时周期,只扫描一个链表,下一个定时周期就扫描下一个链表,并与差分法相同,只对链头进行减1操作。组织成多链的目的,是提高插入速度。如图5所示,图例中共有64棵二叉树,每个定时周期只扫描一棵树,从第0棵二叉树开始,依次扫描第1、2、...、直到第63棵树,然后又回到第0棵树,重新开始下一轮循环。
如图6所示,多二叉树循环定时器调度方法的具体实现流程分为三个部分即多二叉树定时器结构的组织、插入流程与扫描流程,这三个流程分别包括以下步骤1)多二叉树定时器结构的组织将系统中的定时器组织在N个链表中,每个链表的结构为一个二叉树,每个二叉树的编号分别为0,1,...,N-1。二叉树上的每个节点是一个定时器,每个节点的左子树上的定时器的定时时长与父节点的定时时长相等,每个节点的右子树上的定时器的定时时长大于父节点的定时时长。
2)扫描流程第一步,确定扫描位置。在每一个定时周期,系统只扫描一棵二叉树P,设P的初始值为0。采用循环扫描法,扫描完树P后,修改P的值,使得当前的扫描指针改变,即P=(P+1)Mod N,其中Mod模运算。P的取值范围为0、1、...、N-1。
第二步,扫描操作。扫描时,只检查二叉树P上的根节点定时器,并且将这个节点中存放的定时值减1;P的根节点定时值减1后,如果变为0,就从P树上删除该其树根及其左子树,此时P树的右子树变成了一个新的二叉树,被删除的定时器节点为超时定时器,触发这些定时器。
以上扫描流程的具体步骤参见图7所示。
如图7所示,扫描流程的具体步骤如下设当前扫描的二叉树的编号为P,其中P可以是0、…、N-1,其中N是本发明所提出的多二叉树定时器结构中的二叉树的个数,并设P树树根当前的定时值为t,步骤701;对该定时值作减1操作,即t=t-1,步骤702;判断t值是否大于0,步骤703;如否,则P树的树根与其左子树上的节点的定时器超时,触发这些定时器,步骤704;从P树上剪去P的树根和其左子树,步骤705;即P树的树根的右子树变成新的P树,步骤706;改变当前的扫描指针,即令P=(P+1)Mod N,其中Mod为取模运算,步骤707。
3)插入流程的关键步骤第一步,确定新定时器需要插入的二叉树及其定时值当新的定时器W插入时,根据W的定时时长T1、当前扫描位置P、二叉树的总数N,按照公式L=(P+(T1 Mod N))Mod N,计算出W应插入的树L,并按照公式T2=T1/N+1,计算出在L树中,W定时节点的定时值T2。
第二步,确定新定时器在上述步骤中定位的二叉树中的插入位置从上述L树的根节点H开始,沿着L的右子树,按照比较定时值的方法,确定W在L中的插入位置。
如图8所示,为本发明的插入流程,该流程包括以下步骤设新定时器W的时长为T1,P(0、…、N-1)为当前扫描的二叉树编号,(此时系统中共有N棵二叉树),步骤801;根据W的定时时长T1、当前扫描位置P、二叉树的总数N,按照公式L=(P+(T1 Mod N))Mod N,计算出W应插入的树L,并按照公式T2=T1/N+1,计算出在L树中,W定时节点的定时值T2,步骤802;设H为二叉树L的树根,T2则为要插入的新定时器W的定时节点的定时值T2减去树根H的定时值,即T2=T2-H的定时值,步骤803;判断上一步骤中的T2的值是否大于0,并且树根H有右子树,步骤804;如满足该条件,则如果H有右子树,T2=T2-H的定时值,H=H的右子树的根结点,步骤805;并返回步骤804对新的H值和T2值重新进行该步骤的条件判断,如果树根H没有右子树,则判断T2值是否大于0,步骤806,如否,则表明H中的定时值大于T2,将W插入为H的左子树的根结点,H的原左子树变为W的左子树,这个新节点的定时值为0,步骤807;否则,将W插入为H的右子树的根节点,定时值为T2,步骤808;由此完成插入流程。
在插入流程中,需要选取一个合适的N值,才能使本发明提出的方法扫描快,插入新定时器的效率高。设系统中最多可有S个定时器,每个二叉树上的定时器的平均值为S/N,那么插入时,平均比较次数为(S/N)/2。如果每个二叉树上又有很多个相等的定时器,则这些定时器会集中在左子树上,则插入比较的次数会更少。总之,采用这种定时器调度方法,在扫描与插入定时器两个方面,都有很高的效率,并且该方法适合于任何定时器调度需求,具有通用性。
N值的选择可根据系统中定时器的总数S、系统内存的大小以及定时周期等确定。N值越大,插入越快,但是占用内存越大。N值越小,插入越慢。当N等于1时,就变成近似的差分定时器调度方法。理论上,N的取值可以为1到S之间,但考虑到内存资源的情况,以及系统最大能同时触发的定时器的个数Q,N取S/Q值较为合适。
下面通过对一具体实施例的描述,来进一步说明本发明的技术方案,并且通过实验数据,说明本发明的有益效果中兴通讯公司ZXDSL8220 ADSL局端设备的WAND板中有一个内置BNAS,它的设计目标是最多能同时接入用户2048个。所设计的软件系统要求,对于每个接入的用户,BNAS能在10秒钟内感知用户和BNAS是断开还是连接。为了达到这个设计目标,首先想到的方法是采用定时器技术。可是,由于每个接入用户都是一个独立的个体,其上下线时间并不是固定的,针对这种情况,采用定时器控制技术是最简单、也是最容易的一项控制技术。但是,在设计时,又不可能对整个接入系统采用定时器控制技术来实现,而必须对每个接入用户采用定时器控制技术来实现。而且接入系统中,在满用户的情况下,如果采用定时器技术,系统至少有2048个定时器,为了实现对每个接入用户的其他一些接入控制,在最坏情况下,系统最多可同时有5*2048个定时器。另外,如果需要再增加接入用户的个数,那么,系统中的定时器也会大幅增加。所以,必须找到一种高效的管理算法,否则,达不到系统的设计目标。本设计中,就采用了前面专利中所述的定时器调度方法,很好的达到了设计目标。下面是以这个BNAS中的在线检测定时器为例,对这种调度方法的一些技术分析。
设系统中共有N棵二叉树,S个在线检测定时器,定时周期为m,在线检测周期为T。其中S=2048N=64m=100毫秒T=10秒则T=100*m每棵树上平均有SUM个定时器,其中,SUM=S/N=32。
另外,在周期T内,每个定时器必须触发一次,因此,在每个定时周期,平均触发的定时器的个数为Q=M/T*m=2048/100。那么,每棵树的右子树的平均深度为2。
综上所述,采用本专利方法,对于2048个在线检测定时器来说,扫描定时器的比较次数为1,插入定时器的比较次数平均为2。
下面是对上述实例在一个检测周期内对接满2048个接入用户的情况进行定时器调度时,如果采用现有技术的各种定时器调度方法与本发明的多二叉树循环定时器调度方法所做的比较数据1.若采用轮询定时器调度方法在10秒内扫描定时器所做的减1次数为2048*100,插入新定时器所做的比较次数为2048,总共操作次数为a=2048*101=206848。
2.若采用差分定时器调度方法在10秒内扫描定时器所做的减1次数为100,插入新定时器所做的比较次数为2048*2020,总共操作次数为b=2048*2027+100=4192356。
3.若采用分类定时器调度方法至少需要100个类链,因此,在10秒内扫描定时器所做的减1次数为100*100,插入新定时器所做的比较次数为2048,总共操作次数为c=100*100+2048=12048。
4.若采用按2的幂次方分类定时器的调度方法至少需要7类链,因此,在10秒内扫描定时器所做的减1次数为100*7,插入新定时器所做的比较次数为3*2048,判断定时器是否超时的比较次数为3*2048,拆分定时器的移位操作次数为2048*8,总共操作次数为d=100*7+2048*14=29372。
5.若采用本发明提出的多二叉树循环定时器调度方法在10秒内扫描定时器所做的减1次数为100,插入新定时器所做的比较次数为2*2048,计算插入位置的运算次数为2048,总共操作次数为e=100+2048*3=6244。
通过上面的数据,可直接得出以下结论操作次数递减的次序依次为e<c<d<a<b,本发明所提出的多二叉树循环定时器调度方法的效率最高。
另外,以具有N个定时器,最大时长为T的通用定时器系统为例,对上面5种定时器调度法做一个比较分析1.轮询定时器调度方法扫描比较次为N,插入比较数为1,总操作次数为A=N+1。
2.差分定时器调度方法扫描比较次数为1,插入比较次平均为N/2,总操作次数为B=1+N/2。
3.分类定时器调度方法扫描比较次数为T,插入比较次数为1,总的操作次数为C=T+1。
4.按2的幂次方分类定时器的调度方法扫描比较次数为log2T,插入比较次数平均为log2T,拆分运算次数为log2T,总操作次数为D=3*log2T.]]>5.本发明提供的多二叉树循环定时器调度方法扫描比较次数为1,设总共有S棵树,插入比较次数平均为(N/S)/2,插入计算次数为1,总操作次数为E=(N/S)/2+2。
通过以上数据可以得出结论,扫描效率最好的定时器调度方法是差分定时器调度方法和多二叉树循环定时器调度方法。插入效率最好的定时器调度方法是分类定时器调度方法与轮询定时器调度方法。因为,定时器的时钟周期一般非常短,插入定时器的操作相对很少,因此,作为一个通用定时器调度方法,首先扫描的效率必须很高,其次才是插入的效率。从这一方面来看,本发明所述方法是扫描效率最好的定时器调度方法中,插入效率最好的且能通用的定时器调度方法。
以上内容仅为本发明的较佳实施例,其目的并非用于对本发明所提出的系统及方法的限制,本发明的保护范围以权利要求为准。在不脱离本发明的精神和范围的情况下,本领域技术人员在不偏离本发明的范围和精神的情况下,对其进行的关于形式和细节的种种显而易见的修改或变化均应落在本发明的保护范围之内。
权利要求
1.一种多二叉树循环定时器调度方法,其特征在于,该方法包含以下步骤多二叉数定时器结构的组成将系统中的定时器组织成N个链表,每个链表的结构为一个二叉树;二叉树上的每个节点对应系统中的每个定时器;设置每个节点的左子树上的定时器的定时时长与父节点的定时时长相等;设置每个节点的右子树上的定时器的定时时长大于父节点的定时时长;对整个多二叉树结构的定时器组合进行循环扫描循环扫描系统中对应于定时器的多二叉树结构;对该树根的定时值做减1操作,如果该树根的定时值减1后为0,则这棵树的树根与其左子树上的定时器超时,从这棵树上修剪掉这些定时器,并触发这些定时器;在多二叉数定时器结构中插入新定时器当系统中有新的定时器W插入时,根据该定时器的定时时长T1、当前扫描位置P、二叉树的总数N,按照公式L=(P+(T1 Mod N))Mod N,计算出新定时器W应插入的二叉树L;按照公式T2=T1/N+1,得出新定时器定时节点的定时值T2;从应当插入新定时器的二叉树L的根节点H开始,沿着其右子树,比较二叉树L的根节点H的定时值与新定时器定时节点的定时值T2,确定新定时器的插入位置。
2.如权利要求1所述的多二叉树循环定时器调度方法,其特征在于,所述比较二叉树L的根节点H的定时值与新定时器定时节点的定时值T2,确定新定时器的插入位置的步骤,还包括如果二叉树H的定时值大于T2,则将新定时器W插入二叉树L的树根H的左子树的根结点,将二叉树L的树根H的原左子树变为新定时器W的左子树,并且新节点的定时值为0;如果T2的值大于二叉树H中的定时值,则将新定时器W插入为二叉树H的右子树的根结点,并且设该节点上定时器的定时值为T2。
3.如权利要求1所述的多二叉树循环定时器调度方法,其特征在于,所述二叉树的总数N与系统中定时器的总数成正比,与系统最大能同时触发的定时器的个数成反比。
全文摘要
一种多二叉树循环定时器调度方法,将定时器组织在多个链表中,并且每个链表是一棵二叉树,二叉树上的每个节点对应系统中的每个定时器;循环扫描系统中对应于定时器的多二叉树结构;当系统中有新的定时器插入时,先计算得出新定时器应插入的二叉树;然后,从该二叉树的根节点开始,沿着其右子树,比较二叉树的根节点的定时值与新定时器定时节点的定时值,从而确定新定时器的插入位置,与现有技术相比,本发明在继承了差分定时器调度方法扫描快优点的同时,还吸取了分类定时器调度方法插入快的特点,是扫描效率最好的定时器调度方法,而且能够实现在系统中有大量定时器存在时高效插入新定时器,能具有良好通用性的定时器调度方法。
文档编号H04M15/00GK1545308SQ20031010710
公开日2004年11月10日 申请日期2003年11月25日 优先权日2003年11月25日
发明者田平, 李华, 刘兴铨, 胡鹏, 田 平 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1