对定时器任务进行管理的方法

文档序号:7628980阅读:92来源:国知局
专利名称:对定时器任务进行管理的方法
技术领域
本发明涉及通讯领域,尤其涉及一种对Timer(定时器)任务进行管理的方法。
背景技术
在一些大规模需要Timer任务的系统,比如,iSAP server(IntegratedService Application Platform server,一个电信级的联合应用/服务平台)中,需要创建大量的Timer任务,用来进行定时处理。上述系统对于Timer实现往往具有如下两个特点1、需要能够支持大量的Timer任务。以SIP(Session InitiatedProtocol,起始会话协议)应用为例,每个呼叫大约需要10个以上的Timer任务,因此,整个系统需要支持的Timer任务的数量往往超过10000个,甚至更多,在高载荷的情况下,需要支持超过20000个的Timer任务。
2、绝大多数的Timer任务要在很短的时间内进行触发。在典型的SIP应用中,超过50%的Timer任务触发周期是500毫秒。同时,绝大多数的Timer任务有固定的触发周期。例如,以500毫秒为周期的Timer任务大约占总数的60%左右,以1秒为周期的Timer任务大约占总数的20%,以2秒为周期的大约占总数的5%,以4秒为周期的大约占总数的1%。
现有技术中一种对Timer任务进行管理的方法为基于平衡堆的Timer任务管理方法。平衡堆的结构示意图可参见图1。该方法在整个系统中使用一个任务队列,队列根据任务的触发时间采用平衡堆进行排序,具有很高的排序效率,针对每次插入和删除Timer任务操作的排序复杂度为log2N(N表示堆中Timer任务的总数量)。堆中元素queue[n]的两个孩子分别是queue[2*n]和queue[2*n+1]。堆中最小的任务是queue[1].对于堆中的每一个元素结点n,我们假设它的孩子是d,那么结点n的触发时间一定小于或等于孩子d的触发时间。当一个新任务被插入到这个堆中时,堆自动重排平衡树确保这个任务被放到正确的位置上。当一个任务被删除的时候,平衡树对剩下的任务进行重排。
上述对Timer任务进行管理的方法的缺点为由于整个系统使用一个Timer任务队列,各个Timer任务的触发周期不相同,需要对Timer任务排序,排序需要一定的时间代价。随着越来越多的Timer任务被插入,队列的长度会越来越长。因此,单次插入或删除Timer任务操作需要的时间也相应延长,将导致系统性能的不断下降。

发明内容
本发明的目的是提供一种对Timer任务进行管理的方法,从而可以减少单次插入或删除Timer任务操作需要的时间,提高Timer任务的管理效率。
本发明的目的是通过以下技术方案实现的一种对定时器任务进行管理的方法,包括步骤A、在系统中创建至少一个固定周期定时器任务队列,所述固定周期定时器任务队列的属性包括一特定触发周期;B、将系统中的定时器任务放入与其触发周期相同的所述固定周期定时器任务队列,对该定时器任务进行管理。
所述的步骤A具体包括将需要创建的固定周期定时器任务队列的触发周期配置到系统的配置文件中,当系统启动时,根据该配置文件中配置的触发周期信息,创建相应的固定周期定时器任务队列。
所述的固定周期定时器任务队列中的定时器任务按照其触发时间进行升序排列。
所述的步骤B具体包括将系统中创建的定时器任务插入到与其触发周期相同的所述固定周期定时器任务队列的尾部,并对定时器任务进行管理。
所述的对定时器任务进行管理具体包括当所述固定周期定时器任务队列的队首的定时器任务的触发时间到达时,执行该定时器任务,然后,将该定时器任务从该固定周期定时器任务队列的队首删除。
所述的对定时器任务进行管理还包括当所述固定周期定时器任务队列中的定时器任务被取消时,将该定时器任务从所述固定周期定时器任务队列中删除。
所述的固定周期定时器任务队列采用双向链表实现。
还包括步骤C、在系统中创建普通定时器任务队列;D、将没有与所述固定周期定时器队列的触发周期相同的定时器任务放入所述普通定时器任务队列进行管理。
所述普通定时器任务队列采用平衡堆实现。
所述的系统为基于起始会话协议SIP的电信应用系统。
由上述本发明提供的技术方案可以看出,本发明通过在系统中创建固定周期定时器队列对相应的定时器任务进行管理,由于一个固定周期定时器队列中所有定时器任务的触发周期相同,不需要对队列中的定时器任务进行复杂的排序操作,大大简化了插入或删除定时器任务的操作过程,提高了定时器任务的管理效率。
另外通过将定时器任务放到相应的固定周期定时器队列中管理,可以减少普通定时器任务队列的长度,提高了普通定时器任务队列的管理效率。
在本发明中,还可以根据系统的定时器任务的触发周期特点,在系统中合理地同时创建一定数量的固定周期定时器队列和一个普通定时器任务队列,从而极大地提高了具有特定触发周期的定时器任务的管理效率,并大大减少了普通定时器任务队列的长度,降低系统受总负荷影响的程度,为整个系统提供较好的性能。


图1为现有技术的平衡堆结构示意图;图2为本发明所述方法的实施例1的处理流程图;图3为基于双向链表的固定周期定时器任务队列的结构示意图;图4为基于双向链表的固定周期定时器任务队列的三种基本操作示意图;图5为本发明所述方法的实施例2的处理流程图。
具体实施例方式
本发明提供了一种对Timer任务进行管理的方法,本发明的核心为在系统中创建一个或多个固定周期定时器任务队列,利用该固定周期定时器任务队列对系统中具有特定触发周期的定时器任务进行管理。
下面结合附图来详细描述本发明。
本发明所述方法的实施例1的处理流程如图2所示,包括如下步骤步骤2-1、在系统中创建至少一个固定周期定时器任务队列。
Timer任务由Timer线程进行触发,下面先介绍Timer线程的作用。
Timer任务的实现是基于Timer任务队列。系统为每一个Timer任务队列分配一个Timer线程,该线程负责调度Timer任务队列中的任务。如果Timer线程发现队列中有Timer任务,那么,它就把最近需要触发的Timer任务拿出来,然后作如下检查1、如果Timer任务的触发时间是小于或等于当前时间,则马上触发这个Timer任务。
2、如果Timer任务的触发时间是大于当前时间,则该线程就会等待相应的时间差值(触发时间-当前时间)后,再触发这个Timer任务。
在正在等待的时间中,如果有新的Timer任务被插入,Timer线程会得到通知,于是,Timer线程会被唤醒,并重新在队列中取出触发时间最近的Timer任务,继续等待或者触发(依赖于该Timer的触发时间)。之所以要重新取出Timer任务,是因为刚被插入的Timer任务可能具有更小的触发周期。当然,基于固定周期定时器任务队列的Timer线程可不需要执行该操作,因为新创建的固定周期定时器任务队列的Timer任务触发时间肯定晚于原有的Timer任务,除非原来队列中没有Timer任务。
本发明首先基于Timer任务的触发周期对系统中的Timer任务进行分类。通过对系统中的Timer任务进行分类,一旦发现系统中有大量的具有相同触发周期的Timer任务,便将这个触发周期配置成固定周期。
然后,在系统中创建所述固定周期对应的周期定时器任务队列,并分配给该周期定时器任务队列一个线程,在系统中可以创建多个固定周期定时器任务队列。例如,系统中可以创建两个固定周期定时器任务队列,一个触发周期为500毫秒的,一个触发周期为1秒的。
在实际应用中,也可以将固定周期定时器任务队列的触发周期配置到系统的xml(可扩展标记语言)配置文件中,当系统启动时,系统便会根据xml配置文件中的配置的触发周期信息,创建对应的固定周期定时器任务队列。
固定周期定时器任务队列中的定时器任务是按照其触发时间来进行升序排列的,队列中的任务根据其触发时间自动获得排序。固定周期定时器任务队列可以通过一个双向链表来实现,其结构示意图可参见图3。
步骤2-2、将定时器任务放入与其触发周期相同的固定周期定时器任务队列进行管理。
在本实例中,当系统中一个Timer任务被创建时,系统中的Timer Facility(定时器设备)首先根据该任务的触发周期,确定该Timer任务应该放入哪个队列中。如果系统已经为该任务的触发周期分配了相应的固定周期定时器任务队列,则将该Timer任务插到对应的固定周期定时器任务队列中。
固定周期定时器任务队列是一个FIFO(First in,first out,先进先出)队列,可以通过一个双向链表来实现,由于双向链表的操作时间是常数,与队列的长度无关,这确保了系统可以支持更多的载荷。如图4所示,基于双向链表的固定周期定时器任务队列有三种基本操作1、插入固定周期定时器任务队列中的Timer任务都具有相同的触发周期,并且是以创建的顺序插入的。因此,当需要插入一个新创建的固定周期Timer任务时,由于它的触发时间一定比前一个插入的晚,于是,直接将该Timer任务插入队尾即可,不需要再作任何的排序工作,整个队列仍然是按照触发时间升序排列的。
2、删除当一个Timer任务被取消时,直接将该Timer任务从队列中删除即可。和上述插入操作一样,删除操作也不需要再作任何的排序工作。
3、触发一旦一个Timer任务的Timer线程等待完成,就意味这个Timer任务需要被触发。该Timer线程就会从线程池中获取一个线程来异步执行这个Timer任务。然后,直接从队首将该任务删除,Timer线程再从Timer队列中获取下一Timer任务。
对于系统中的Timer任务的触发周期不是很多的情况,通过创建有限的相应的固定周期定时器队列,即可非常高效地完成Timer任务的管理。
本发明所述方法的实施例2的处理流程如图5所示,包括如下步骤
步骤5-1、在系统中同时创建固定周期定时器任务队列和普通定时器任务队列。
该实施例适用于系统中除了具有一定数量的特定触发周期的Timer任务外,还具有大量的触发周期变化范围较大的Timer任务的情况。比如大规模需要Timer任务的基于SIP的电信应用的系统。
在本实施例中,在系统中除了要创建若干个实施例1所述的固定周期定时器队列外,还要创建一个普通定时器任务队列,用于管理没有与固定周期定时器队列的触发周期相同的所有的定时器任务。
普通定时器任务队列使用平衡堆来实现,根据任务的触发时间进行排序,根据数字坐标来确定队列中的元素。普通定时器任务队列中一个元素queue[n]的两个孩子分别是queue[2*n]和queue[2*n+1],堆中最小的任务是queue[1],对于堆中的每一个元素结点n,我们假设它的孩子是d,那么结点n的触发时间一定小于或等于孩子d的触发时间。
普通定时器任务队列还可以采用其它方法实现,如用双用链表实现,将链表中的Timer任务按触发时间直接排序。
步骤5-2、将定时器任务分别放入固定周期定时器任务队列和普通定时器任务队列进行管理。
当系统中一个Timer任务被创建时,如果该Timer任务的触发周期被配置成了固定周期定时器任务队列,则将该Timer任务插入到对应的固定周期定时器任务队列中,按照实施例1所述的管理方法对该Timer任务进行管理;否则,将该Timer任务插入到普通定时器任务队列中,在普通定时器任务队列中对该Timer任务进行管理。
对于使用平衡堆实现的普通定时器任务队列,也有插入、删除和触发三种操作。当一个新Timer任务被插入到这个堆中时,堆自动重排平衡树确保这个任务被放到正确的位置上。当一个Timer任务被触发后,需要将该Timer任务删除。当一个Timer任务被删除的时候,平衡树对剩下的Timer任务进行重排,以满足普通定时器任务队列的要求。
在该实施例中,由于有大量的具有特定触发周期的Timer任务从普通定时器任务队列中分离出来,放到了固定周期定时器任务队列中,大大缩减了普通定时器任务队列的长度。因此,普通定时器任务队列的插入或删除操作也由于队列变短而相应地变快,大大减少了普通定时器任务队列的排序压力。特别是对拥有大量相同周期的Timer任务的系统,这种优势非常明显。从而为整个系统提供很好的性能。
比如,采用该实施例所述方法,通过在iSAP Server中分别创建500毫秒、1秒、2秒、4秒的固定周期定时器队列和一个采用平衡堆实现的普通定时器任务队列,在很高的载荷下,iSAP server能够支持超过20000个的Timer任务。
以上所述,仅为本发明较佳的具体实施方式
,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
权利要求
1.一种对定时器任务进行管理的方法,其特征在于,包括步骤A、在系统中创建至少一个固定周期定时器任务队列,所述固定周期定时器任务队列的属性包括一特定触发周期;B、将系统中的定时器任务放入与其触发周期相同的所述固定周期定时器任务队列进行管理。
2.根据权利要求1所述的方法,其特征在于,所述的步骤A具体包括将需要创建的固定周期定时器任务队列的触发周期配置到系统的配置文件中,当系统启动时,根据该配置文件中配置的触发周期信息,创建相应的固定周期定时器任务队列。
3.根据权利要求1所述的方法,其特征在于,所述的固定周期定时器任务队列中的定时器任务按照其触发时间进行升序排列。
4.根据权利要求1所述的方法,其特征在于,所述的步骤B具体包括将系统中创建的定时器任务插入到与其触发周期相同的所述固定周期定时器任务队列的尾部,并对定时器任务进行管理。
5.根据权利要求4所述的方法,其特征在于,所述的对定时器任务进行管理具体包括当所述固定周期定时器任务队列的队首的定时器任务的触发时间到达时,执行该定时器任务,然后,将该定时器任务从该固定周期定时器任务队列的队首删除。
6.根据权利要求5所述的方法,其特征在于,所述的对定时器任务进行管理还包括当所述固定周期定时器任务队列中的定时器任务被取消时,将该定时器任务从所述固定周期定时器任务队列中删除。
7.根据权利要求1所述的方法,其特征在于,所述的固定周期定时器任务队列采用双向链表实现。
8.根据权利要求1至7任一项所述的方法,其特征在于,还包括步骤C、在系统中创建普通定时器任务队列;D、将没有与所述固定周期定时器队列的触发周期相同的定时器任务放入所述普通定时器任务队列进行管理。
9.根据权利要求8所述的方法,其特征在于,所述普通定时器任务队列采用平衡堆实现。
10.根据权利要求8所述的方法,其特征在于,所述的系统为基于起始会话协议SIP的电信应用系统。
全文摘要
本发明提供了一种对Timer(定时器)任务进行管理的方法,该方法主要包括在系统中创建至少一个固定周期定时器任务队列,所述固定周期定时器任务队列的属性包括一特定触发周期;将系统中的定时器任务放入与其触发周期相同的所述固定周期定时器任务队列,对该定时器任务进行管理。利用本发明所述方法,可以减少单次插入或删除Timer任务操作需要的时间,提高Timer任务的管理效率。
文档编号H04Q3/00GK1870767SQ20051013053
公开日2006年11月29日 申请日期2005年12月14日 优先权日2005年12月14日
发明者张民卫, 伽亚吉 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1