CN100585563C - 一种定时器任务服务方法 - Google Patents
一种定时器任务服务方法 Download PDFInfo
- Publication number
- CN100585563C CN100585563C CN200610033285A CN200610033285A CN100585563C CN 100585563 C CN100585563 C CN 100585563C CN 200610033285 A CN200610033285 A CN 200610033285A CN 200610033285 A CN200610033285 A CN 200610033285A CN 100585563 C CN100585563 C CN 100585563C
- Authority
- CN
- China
- Prior art keywords
- timer
- task
- thread
- queue
- timer task
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种Timer服务方法,包括:(1)建立定时器Timer任务队列,用于容纳Timer任务;(2)调度Timer线程;(3)所述Timer线程发现该Timer任务队列中一个Timer任务到达触发;(4)所述Timer线程从线程池中取出一个执行线程,并把所述Timer任务提交给所述执行线程,并执行(5);(5)所述执行线程执行该Timer任务,在完成后,所述执行线程返回线程池;所述Timer线程发现该Timer任务队列中下一个Timer任务到达触发,执行(4)。应用本发明的***可以支持大量的Timer任务,包括创建和取消Timer操作;同时避免了大量线程被创建,优化了相关资源,增强了***的整体性能;使得整个***的线程和其它资源都得到了有效应用。
Description
技术领域
本发明涉及一种通信***的定时机制服务方法,尤其涉及的是,一种定时器任务服务方法。
背景技术
iSAP-S(集成服务应用平台-服务器端,Integrated ServiceApplication Platform-Server Side)中的Timer(定时器)的定时服务在资源的应用上是一个轻量级的实现,可以通过修改配置参数,将其应用在重量级的应用场合,例如需要创建大量Timer的电信应用中。它不同于JDK(java开发包,Java Development Kit)提供的Timer,对每一个任务需要独立的线程来执行。
JDK提供了java.util.Timer(java运用包中的定时类)支持Timer任务创建,JDK提供的Timer可以支持一次或多次触发的Timer任务。该Timer任务可以是指定的触发周期或者在指定的时间上触发。当Timer任务被执行的时候,该任务的回调方法在一个单独的线程内被调用。
Java也提供了javax.swing.Timer(java图形包中的定时器)的Timer实现。但这个Timer实现适合用在GUI(图形用户界面,Graphical UserInterface)中。这个Timer的事件分发机制更易于被GUI程序员理解,事件分发线程处理这种事件机制更为统一。另外所有的任务通过同一个线程进行执行,即一个线程被多个任务共享。
对于java.util.Timer,每一个Timer任务被执行的时候,就会伴随着一个线程被创建,直到这个任务被执行完毕,或者被取消。如果在一个***中有大量的Timer任务同时被触发,会导致大量的线程被创建,Timer任务自身将占用大量的线程,然而在一个***中,线程的数量是有限制的,从而导致正常的处理将由于线程的缺乏而得不到处理。
因此在硬件能力方面有限制以及需要大量线程的场合,这种方案是不能胜任的。此外,当在高压力环境下,***过多线程在运行,线程调度器需要作很多的线程管理工作,这一定程度上也会影响线程调度的性能。
现有技术javax.swing.Timer解决方案倾向于用在GUI应用中。它不适合应用在Server端的程序。这个实现方案的一个缺点是所有的任务共享一个线程。这意味这任务的执行会被排序,如果一个任务执行需要很长时间,其它需要执行的任务只能等待前一个完成,这就导致了Timer任务有可能没有被按时触发,从而影响了精度和执行的效率。
因此,现有技术存在缺陷,需要改进。
发明内容
本发明的目的在于提供一种Timer服务方法,当Timer被创建的时候,不需要创建线程;通过重复使用线程池中的线程,以避免线程被频繁创建从而增强***的性能。
本发明的技术方案如下:
一种定时器任务服务方法,其包括以下步骤:
(1)建立定时器Timer任务队列,用于容纳Timer任务;
(2)调度Timer线程;
(3)所述Timer线程发现该Timer任务队列中一个Timer任务到达触发;
(4)所述Timer线程从线程池中取出一个执行线程,并把所述Timer任务提交给所述执行线程,并执行(5);
(5)所述执行线程执行该Timer任务,在完成后,所述执行线程返回线程池;所述Timer线程发现该Timer任务队列中下一个Timer任务到达触发,执行(4)。
所述方法还包括以下步骤:
所述Timer线程检查所述Timer任务是否重复任务;
如果所述Timer任务是重复任务,则重新计算其下一次的触发时间,并将其增加到Timer任务队列中;
如果所述Timer任务是一次性任务或已经完成重复的重复任务,则从Timer任务队列删除该任务。
所述的方法,其中,所述Timer任务队列基于平衡树技术实现。
所述的方法,其中,所述Timer任务队列设置两个用户接口,包括增加任务和删除任务。
所述的方法,其中,所述将其增加到Timer任务队列中步骤后还包括:所述Timer任务队列将任务发生变化的信息传输给Timer线程。
所述的方法,其中,所述Timer线程发现该Timer任务队列中一个Timer任务到达触发的步骤包括:所述Timer线程从Timer任务队列中获取具有最小触发时间的Timer任务;当该Timer任务触发时间小于或等于当前时间,确定该Timer任务到达触发所述的方法,其中,所述Timer线程给一个Timer任务分配了执行线程后,Timer线程自动处理队列中的其它Timer任务。
所述的方法,其中,所述Timer任务被线程池中获得的执行线程在后台执行。
所述的方法,其中,其重复调度所述线程池的执行线程,用于执行Timer任务。
所述的方法,其中,所述Timer任务被创建的时候,不为其创建特定执行线程。
采用上述方案,应用本发明的***可以支持大量的Timer任务,包括创建和取消Timer操作;同时避免了大量线程被创建,优化了相关资源,增强了***的整体性能;使得整个***的线程和其它资源都得到了有效应用。
附图说明
图1为本发明的定时器任务服务流程图。
图2为本发明的具体实施例中定时器任务服务的流程图。
具体实施方式
本发明的核心思想是提供了一种定时器任务服务方法,排列成定时器任务队列,使用专用的线程实现任务的调度,使用线程池中的执行线程执行已经到触发时的任务队列中的任务,执行线程完成服务后被回送到线程池中,完成了定时器任务的服务。
本发明中的Timer服务是使用Timer线程实现对执行线程和对将来需要执行的任务进行调度的一种定时机制。
本发明中使用Timer任务队列排列需要执行的任务,使用优先队列作为核心数据结构,它在内存中表示为平衡二叉树。队列(queue[n])的左孩子(left son)和右孩子(right son)分别为偶数队列(queue[2*n])和奇数队列(queue[2*n+1])。优先队列基于任务的触发时间进行排序。最小的任务放在队头(queue[1]),对树中的任意一个结点n,假设它的后代为d,那么结点n的触发时间小于等于(<=)后代d的触发时间。
Timer线程是***中使用的一个专用的线程,该线程负责调度Timer任务队列中的Timer任务,读取队列中的第一个任务的触发时间,并计算出相对于当前时间需要等待的时长,然后该线程就等待计算所得的时长,当等待时间到达时,处理Timer任务。然后继续同样的处理,读取下一个Timer任务。
下面结合附图1说明本发明的具体实施流程:
步骤101、建立Timer任务队列。
Timer任务队列基于平衡树技术实现,其用于容纳Timer任务。同时,Timer任务队列提供了对队列的基本操作,如删除一个任务、增加一个任务、对任务进行排序等;其功能是管理Timer任务。当一个新的任务被加到Timer任务队列中,队列自动重排平衡树(balanced tree)以确保这个任务被放到了正确的位置。同样地,当一个任务被删除时,平衡树自动重排剩下的任务。
因此,Timer任务队列,向用户提供了两个接口:一个为增加Timer任务,一个为删除Timer任务。当一个Timer任务被增加或者删除时,Timer任务队列会依据每个任务需要被触发的时间按照升序自动重排该队列。
用户可以在用户模块中设置或取消Timer服务;Timer服务模块将用户的操作转为向Timer任务队列增加或删除任务。
步骤102、当一个Timer任务到达触发时,从线程池中取一个执行线程,执行所述Timer任务。
Timer线程将监控Timer任务队列,使得Timer线程可以从队列中获取最近要触发的Timer任务。
当Timer任务队列通知Timer线程任务发生了变化,Timer线程从Timer任务队列中取下一个具有最小触发时间的任务。通过调用***中专用的Timer线程,其读取队列中的第一个任务的触发时间,并计算出相对于当前时间需要等待的时长,然后该线程就等待计算所得的时长。
当等待时间到达时,该Timer任务的回调方法就会被从线程池中获得的后台执行线程调用。
Timer线程将进行下面的检查,以确定下一步需要进行的操作:
如果该任务的触发时间小于或等于当前时间,将立即从线程池中调用执行线程执行该任务;
如果该任务的触发时间大于当前的时间,Timer线程计算该任务等待时间,即触发时间减去当前时间的差值,然后Timer线程将等待该差值时间。
当Timer线程正在等待时,如果一个新的任务被增加,Timer线程将会得到通知,Timer线程将会被唤醒并重新从队列中取最小触发时间的Timer。当增加的timer任务具有最短的触发时间,从而需要重新取最小触发时间的Timer;如果没有新任务被增加,则Timer线程完成等待后被唤醒,通过把该任务扔给线程池触发该任务。
一旦Timer线程等待完成,Timer线程将从线程池中获取一个执行线程,并用该线程执行该Timer任务。
步骤103、执行线程返回线程池。
Timer线程给Timer任务分配了执行线程之后,Timer线程会自动处理队列中的其它任务;同时,执行线程自动返回线程池。
Timer线程将会检查该Timer任务是需要多次触发的重复任务还是一次性的任务。如果该任务是重复任务,该任务将会被重新计算下一次的触发时间,并被增加到Timer任务队列中。如果该任务是已经完成重复的重复任务或一次性任务,则该任务被删除。当任务被删除时,Timer队列将会自动排序Timer任务平衡树。
以下结合附图2说明本发明实现实施具体的步骤。
用户设置Timer(1);Timer把增加任务的信息通知Timer任务队列(2);Timer任务队列把任务队列发生变化的信息通知Timer线程(3),并且基于任务的触发时间将任务排序;Timer线程从Timer任务队列中获取下一个具有最小触发时间的Timer任务(4);判断是否立即执行该任务(5)。
如果该任务触发时间小于或等于当前时间(6),则通过把该任务扔给线程池触发该任务(7),并且判断是否属于重复任务(8)。若是一次性的任务或者重复任务已经完成重复(9),则扔掉该任务,处理下一个任务(10),转向获取下一个任务(4)。若是重复任务,则更新任务的下一次调度的时间,并重新放到Timer任务队列(11),转向把增加任务的信息通知Timer任务队列(2)。
如果该任务触发时间大于当前时间(12),则等待该任务的触发时间到达,完成等待后被Timer线程唤醒(13),从而转向该任务扔给线程池触发该任务(7),并且判断是否属于重复任务(8)。在等待完成前如果增加新任务被唤醒(14),则转向获取下一个任务(4)。
用户也可以取消Timer(1A),Timer把删除任务的信息通知Timer任务队列(2A),Timer任务队列将该任务从队列中删除。
以下是本发明的应用之一:在电信级的应用平台iSAP server,基于SIP的电信应用需要创建大量的Timer来处理业务超时,特别是在峰值应用时,***中存在大量的Timer,使用JDK提供的Timer机制,无法适应这种峰值应用。而使用本发明的解决方案,***很容易支持到超过20000个Timer任务;而且在支持大量Timer任务的同时,***仍然有非常高的性能。这主要得益于线程池的使用以及其它相关资源的优化。由于Timer实现使用和重用了线程池中的线程,避免了大量线程被创建,因此整个***的线程和其它资源都得到了有效应用。
在本发明中,Timer任务队列通过Timer任务队列和Timer线程的应用,提出不需要对每个Timer任务建立独立的执行线程,因此突破了***允许的最大线程数量的限制;从而能够支持大量的Timer任务。
同时在本发明中,使用线程池,重复使用线程池中的执行线程完成Timer任务,不需要频繁地创建线程,从而为***提供了更好的性能。
应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (10)
1、一种定时器任务服务方法,其特征在于,其包括以下步骤:
(1)建立定时器Timer任务队列,用于容纳Timer任务;
(2)调度Timer线程;
(3)所述Timer线程发现该Timer任务队列中一个Timer任务到达触发;
(4)所述Timer线程从线程池中取出一个执行线程,并把所述Timer任务提交给所述执行线程,并执行(5);
(5)所述执行线程执行该Timer任务,在完成后,所述执行线程返回线程池;所述Timer线程发现该Timer任务队列中下一个Timer任务到达触发,执行(4)。
2、根据权利要求1所述的方法,其特征在于,所述方法还包括以下步骤:
所述Timer线程检查所述Timer任务是否重复任务;
如果所述Timer任务是重复任务,则重新计算其下一次的触发时间,并将其增加到Timer任务队列中;
如果所述Timer任务是一次性任务或已经完成重复的重复任务,则从Timer任务队列删除该任务。
3、根据权利要求1或2所述的方法,其特征在于,所述Timer任务队列基于平衡树技术实现。
4、根据权利要求1所述的方法,其特征在于,所述Timer任务队列设置两个用户接口,包括增加任务和删除任务。
5、根据权利要求2所述的方法,其特征在于,所述将其增加到Timer任务队列中步骤后还包括:所述Timer任务队列将任务发生变化的信息传输给Timer线程。
6、根据权利要求1所述的方法,其特征在于,所述Timer线程发现该Timer任务队列中一个Timer任务到达触发的步骤包括:所述Timer线程从Timer任务队列中获取具有最小触发时间的Timer任务;当该Timer任务触发时间小于或等于当前时间,确定该Timer任务到达触发
7、根据权利要求1所述的方法,其特征在于,所述Timer线程给一个Timer任务分配了执行线程后,Timer线程自动处理队列中的其它Timer任务。
8、根据权利要求1所述的方法,其特征在于,所述Time r任务被线程池中获得的执行线程在后台执行。
9、根据权利要求1所述的方法,其特征在于,其重复调度所述线程池的执行线程,用于执行Timer任务。
10、根据权利要求1所述的方法,其特征在于,所述Timer任务被创建的时候,不为其创建特定执行线程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200610033285A CN100585563C (zh) | 2006-01-20 | 2006-01-20 | 一种定时器任务服务方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200610033285A CN100585563C (zh) | 2006-01-20 | 2006-01-20 | 一种定时器任务服务方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1873615A CN1873615A (zh) | 2006-12-06 |
CN100585563C true CN100585563C (zh) | 2010-01-27 |
Family
ID=37484096
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200610033285A Expired - Fee Related CN100585563C (zh) | 2006-01-20 | 2006-01-20 | 一种定时器任务服务方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100585563C (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833450B (zh) * | 2010-04-21 | 2015-01-28 | 中兴通讯股份有限公司 | 定时方法和装置 |
CN101840353B (zh) * | 2010-05-14 | 2012-10-24 | 陈冬岩 | 一种实时嵌入式操作***的动态计时方法 |
CN102129393A (zh) * | 2011-03-09 | 2011-07-20 | 南京恩瑞特实业有限公司 | 通用定时任务管理的实现方法 |
CN103092682B (zh) * | 2011-10-28 | 2016-09-28 | 浙江大华技术股份有限公司 | 异步网络应用程序处理方法 |
CN102426539B (zh) * | 2011-11-01 | 2014-06-04 | 深圳市航天泰瑞捷电子有限公司 | 一种定时器任务自动处理方法及*** |
CN103324469A (zh) * | 2012-03-21 | 2013-09-25 | 腾讯科技(深圳)有限公司 | 定时器实现方法及装置 |
CN103455310B (zh) * | 2012-05-29 | 2017-02-08 | 中兴通讯股份有限公司 | 信号量等待接口定时方法及装置 |
CN103902586B (zh) * | 2012-12-27 | 2017-11-17 | 腾讯科技(深圳)有限公司 | 网页多媒体信息任务的处理方法及装置 |
CN103164338B (zh) * | 2013-03-25 | 2016-03-30 | 华为技术有限公司 | 并发处理***的模拟方法及装置 |
CN103345415B (zh) * | 2013-07-30 | 2016-06-22 | 广东欧珀移动通信有限公司 | 管理定时器的终端节能方法和装置 |
CN104199730B (zh) * | 2014-08-29 | 2018-04-13 | 浪潮集团有限公司 | 一种基于同步i/o复用机制的单线程多任务处理方法 |
CN104268015B (zh) * | 2014-09-05 | 2017-08-01 | 烽火通信科技股份有限公司 | 嵌入式设备高可用性定时器的实现方法及定时器 |
CN105068861A (zh) * | 2015-07-09 | 2015-11-18 | 合肥君正科技有限公司 | 一种事务执行方法及装置 |
CN106020951A (zh) * | 2016-05-12 | 2016-10-12 | 中国农业银行股份有限公司 | 一种任务调度方法及*** |
CN106126332A (zh) * | 2016-06-27 | 2016-11-16 | 北京京东尚科信息技术有限公司 | 分布式定时任务调度***及方法 |
CN107678838B (zh) * | 2017-10-19 | 2021-07-02 | 郑州云海信息技术有限公司 | 一种跟踪虚拟机操作的方法、装置及虚拟机管理平台 |
CN107704323A (zh) * | 2017-11-07 | 2018-02-16 | 广州探迹科技有限公司 | 一种网络爬虫任务调度方法及装置 |
CN110018865A (zh) * | 2018-01-10 | 2019-07-16 | 武汉斗鱼网络科技有限公司 | 定时器设置方法、存储介质、电子设备及*** |
CN109445922A (zh) * | 2018-10-31 | 2019-03-08 | 北京慧流科技有限公司 | 任务处理方法及装置、电子设备及存储介质 |
CN110119323A (zh) * | 2019-05-13 | 2019-08-13 | 重庆八戒电子商务有限公司 | 一种基于时间轮执行延迟队列的方法及*** |
CN110737526A (zh) * | 2019-10-22 | 2020-01-31 | 上海思询信息科技有限公司 | 一种基于Redis的分布式集群下的定时任务管理方法及装置 |
-
2006
- 2006-01-20 CN CN200610033285A patent/CN100585563C/zh not_active Expired - Fee Related
Non-Patent Citations (2)
Title |
---|
面向通信领域的定时器队列管理模型. 何先波,殷峰.西南名族大学学报·自然科学版,第31卷第4期. 2005 |
面向通信领域的定时器队列管理模型. 何先波,殷峰.西南名族大学学报·自然科学版,第31卷第4期. 2005 * |
Also Published As
Publication number | Publication date |
---|---|
CN1873615A (zh) | 2006-12-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100585563C (zh) | 一种定时器任务服务方法 | |
CN102455933B (zh) | 一种通过线程管理提高多任务处理效率的方法 | |
CN103092682B (zh) | 异步网络应用程序处理方法 | |
CN101464810A (zh) | 服务程序处理方法及服务器 | |
CN101373474A (zh) | 海量数据实时处理架构及用于该架构的实时随需处理平台 | |
CN102592198B (zh) | 一种支持组合业务的工作流引擎 | |
CN103065221A (zh) | 基于bpel的多学科协同优化流程建模与调度的方法和*** | |
CN102779075A (zh) | 一种在多处理器核***中进行调度的方法、装置及*** | |
CN101859260A (zh) | 用于操作***中的定时器管理装置和管理方法 | |
CN102662725B (zh) | 一种事件驱动的高并发流程虚拟机实现方法 | |
CN101359294A (zh) | 一种嵌入式***定时器的管理方法 | |
CN102810184A (zh) | 一种动态执行工作流的方法、装置及企业*** | |
CN113535362B (zh) | 一种分布式调度***架构和微服务工作流调度方法 | |
CN100492282C (zh) | 处理***、通信***及在处理***中处理作业的方法 | |
CN104536819A (zh) | 基于web服务的任务调度方法 | |
CN110308979A (zh) | 基于任务调度的异步处理框架及其实现方法 | |
CN111240819A (zh) | 一种调度任务的发布***及方法 | |
CN105446812A (zh) | 一种多任务调度配置方法 | |
CN105227648B (zh) | 一种基于时间桶的地铁综合监控***时间序列触发方法 | |
CN102591714B (zh) | 一种流程调用方法、***及应用服务器 | |
CN115658278B (zh) | 一种支持高并发协议交互的微任务调度机 | |
CN106131073A (zh) | 一种适用于多应用场景的通信框架和通信方法 | |
CN116204289A (zh) | 进程数据处理方法、终端设备及存储介质 | |
CN102163163A (zh) | 无线传感器网络传感器小节点操作***及其实现方法 | |
CN111414244B (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 | ||
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20160418 Address after: American California Patentee after: Snaptrack, Inc. Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee before: Huawei Technologies Co., Ltd. |
|
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100127 Termination date: 20190120 |
|
CF01 | Termination of patent right due to non-payment of annual fee |