一种利用时间转盘处理定时任务的方法和装置制造方法

文档序号:6640715阅读:536来源:国知局
一种利用时间转盘处理定时任务的方法和装置制造方法
【专利摘要】本发明公开了一种利用时间转盘处理定时任务的方法和装置,所述时间转盘中设置有当前时间刻度指针,该方法包括以下步骤:当监听到时间间隔触发器事件后,在所述时间转盘上移动所述当前时间刻度指针;获取所述当前时间刻度指针对应的转盘刻度上挂载的定时任务,将所述定时任务转移到任务处理线程或任务处理线程池进行处理。本发明使用时间转盘达到了定时器的效果,并将对定时任务的处理放到线程上下文,能够处理存在睡眠和阻塞现象的任务,且无需针对任务数量的增加而增加线程,降低了对系统资源的耗费。
【专利说明】一种利用时间转盘处理定时任务的方法和装置

【技术领域】
[0001]本发明涉及计算机【技术领域】,具体涉及一种利用时间转盘处理定时任务的方法和
目.0

【背景技术】
[0002]在Linux系统中进行应用程序设计时,经常涉及到对定时任务的处理,尤其是在用户空间开发应用程序时。由于Linux系统没有提供类似与内核空间定时器的接口,现有技术通常在用户空间通常使用SIGALRM信号定时器接口 alarm和setitimer等,或者对每个定时任务分配一个处理线程,并在处理任务之前,通过调用睡眠函数使该任务睡眠一会,从而达到定时处理的效果。
[0003]然而,上述两种方法均存在弊端:前者的弊端在于,信号定时器是在软中断上下文执行的,当被处理的任务存在睡眠或者因互斥锁而阻塞现象时,会导致程序异常;后者的弊端在于,每个定时任务需要单独占用一个线程,线程中调用的睡眠函数甚至也有可能占用一个线程,而用户空间中可运行的线程是有限的,且线程本身也需要消耗一定的资源成本,因此,该方法能处理的定时任务的数量是有限的,且需要耗费过多的资源。


【发明内容】

[0004]本发明提供了一种利用时间转盘处理定时任务的方法和装置,以解决现有技术中无法有效地处理定时任务的缺陷。
[0005]本发明提供了一种利用时间转盘处理定时任务的方法,所述时间转盘中设置有当前时间刻度指针,所述方法包括以下步骤:
[0006]当监听到时间间隔触发器事件后,在所述时间转盘上移动所述当前时间刻度指针;
[0007]获取所述当前时间刻度指针对应的转盘刻度上挂载的定时任务,将所述定时任务转移到任务处理线程或任务处理线程池进行处理。
[0008]可选地,所述获取所述当前时间刻度指针对应的转盘刻度上挂载的定时任务之前,还包括:
[0009]判断所述当前时间刻度指针对应的转盘刻度上是否挂载有定时任务;
[0010]所述获取所述当前时间刻度指针对应的转盘刻度上挂载的定时任务之前,具体为:
[0011]当所述当前时间刻度指针对应的刻度上挂载有定时任务时,获取所述当前时间刻度指针对应的转盘刻度上挂载的定时任务。
[0012]可选地,所述的方法,还包括:
[0013]将新的定时任务挂载到所述时间转盘的转盘刻度上。
[0014]可选地,所述将新的定时任务挂载到所述时间转盘的转盘刻度上,具体为:
[0015]根据所述新的定时任务的定时时间和所述当前时间刻度指针对应的转盘刻度,计算所述新的定时任务对应的转盘刻度,将所述新的定时任务挂载到计算得到的转盘刻度上。
[0016]可选地,所述时间转盘是通过数组或环形的链表结构实现的。
[0017]本发明还提供了一种利用时间转盘处理定时任务的装置,所述时间转盘中设置有当前时间刻度指针,所述装置包括:
[0018]监听模块,用于监听时间间隔触发器事件;
[0019]设置模块,用于在所述监听模块监听到时间间隔触发器事件后,在所述时间转盘上移动所述当前时间刻度指针;
[0020]获取模块,用于获取所述设置模块移动后的所述当前时间刻度指针对应的转盘刻度上挂载的定时任务;
[0021]转移模块,用于将所述获取模块获取到的所述定时任务转移到任务处理线程或任务处理线程池进行处理。
[0022]可选地,所述的装置,还包括:
[0023]判断模块,用于判断所述当前时间刻度指针对应的转盘刻度上是否挂载有定时任务;
[0024]所述获取模块,具体用于在所述判断模块判断出所述当前时间刻度指针对应的刻度上挂载有定时任务时,获取所述当前时间刻度指针对应的转盘刻度上挂载的定时任务。
[0025]可选地,所述的装置,还包括:
[0026]挂载模块,用于将新的定时任务挂载到所述时间转盘的转盘刻度上。
[0027]可选地,所述挂载模块,具体用于根据所述新的定时任务的定时时间和所述当前时间刻度指针对应的转盘刻度,计算所述新的定时任务对应的转盘刻度,将所述新的定时任务挂载到计算得到的转盘刻度上。
[0028]可选地,所述时间转盘是通过数组或环形的链表结构实现的。
[0029]本发明使用时间转盘达到了定时器的效果,并将对定时任务的处理放到线程上下文,能够处理存在睡眠和阻塞现象的任务,且无需针对任务数量的增加而增加线程,降低了对系统资源的耗费。

【专利附图】

【附图说明】
[0030]图1为本发明实施例中的一种利用时间转盘处理定时任务的方法流程图;
[0031]图2为本发明实施例中的一种时间转盘的示意图;
[0032]图3为本发明实施例中的一种利用时间转盘处理定时任务的装置结构图。

【具体实施方式】
[0033]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0034]需要说明的是,如果不冲突,本发明实施例以及实施例中的各个特征可以相互结合,均在本发明的保护范围之内。另外,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0035]本发明实施例提供了一种利用时间转盘处理定时任务的方法,该时间转盘中设置有当前时间刻度指针,该方法如图1所示,包括以下步骤:
[0036]步骤101,将新的定时任务挂载到时间转盘的转盘刻度上。
[0037]具体地,根据新的定时任务的定时时间和当前时间刻度指针对应的转盘刻度,计算新的定时任务对应的转盘刻度,将新的定时任务挂载到计算得到的转盘刻度上。其中,时间转盘是通过数组或环形的链表结构实现的。
[0038]本实施例中的时间转盘,如图2所示,由多个小格组成,每个小格代表一个转盘刻度。针对上述时间转盘,需要预先定义间隔粒度、最大定时时长、当前时间刻度指针、实现时间转盘、时间间隔触发器,以及任务处理线程或任务处理线程池,在转盘刻度上定义一个任务指针,用于挂载任务链。其中,当前时间刻度指针用于记录当前时刻的位置,时间间隔触发器采用单独的一个线程实现,以触发当前时间刻度指针的移动。例如,定义时间转盘的间隔粒度为I秒,最大定时时长为10分钟,即600秒,因此,在时间转盘上定义600个转盘刻度。具体地,可以使用环形的链表结构实现,每个链表节点代表一个转盘刻度;也可以采用大小为600个元素的数组表示,以快速计算定时任务的转盘刻度位置。
[0039]进一步地,当需要设置新的定时任务时,可以根据当前时间刻度指针计算该任务应该挂载的位置。例如,当前时间刻度指针指向转盘刻度m时,如果新的定时任务需要在I秒后被处理,则将该任务挂载到转盘刻度m+1上;如果新的定时任务需要在9秒后被处理,则将该任务挂载到转盘刻度m+9上。
[0040]步骤102,监听时间间隔触发器事件。
[0041]步骤103,当监听到时间间隔触发器事件后,在时间转盘上移动当前时间刻度指针。
[0042]具体地,当监听到时间间隔触发器事件后,将当前时间刻度指针向后移动一个转盘刻度。
[0043]步骤104,判断当前时间刻度指针对应的转盘刻度上是否挂载有定时任务,如果是,则执行步骤105 ;否则,返回步骤102。
[0044]步骤105,获取当前时间刻度指针对应的转盘刻度上挂载的定时任务,将定时任务转移到任务处理线程或任务处理线程池进行处理。
[0045]本发明实施例使用时间转盘达到了定时器的效果,并将对定时任务的处理放到线程上下文,能够处理存在睡眠和阻塞现象的任务,且无需针对任务数量的增加而增加线程,降低了对系统资源的耗费。
[0046]基于上述利用时间转盘处理定时任务的方法,本发明实施例还提供了一种利用时间转盘处理定时任务的装置,该时间转盘中设置有当前时间刻度指针,该装置包括:
[0047]监听模块310,用于监听时间间隔触发器事件。
[0048]设置模块320,用于在监听模块310监听到时间间隔触发器事件后,在时间转盘上移动当前时间刻度指针。
[0049]其中,时间转盘是通过数组或环形的链表结构实现的。
[0050]获取模块330,用于获取设置模块320移动后的当前时间刻度指针对应的转盘刻度上挂载的定时任务。
[0051]转移模块340,用于将获取模块330获取到的定时任务转移到任务处理线程或任务处理线程池进行处理。
[0052]进一步地,上述装置,还包括:
[0053]判断模块350,用于判断当前时间刻度指针对应的转盘刻度上是否挂载有定时任务。
[0054]相应地,上述获取模块330,具体用于在判断模块350判断出当前时间刻度指针对应的刻度上挂载有定时任务时,获取当前时间刻度指针对应的转盘刻度上挂载的定时任务。
[0055]进一步地,上述装置,还包括:
[0056]挂载模块360,用于将新的定时任务挂载到时间转盘的转盘刻度上。
[0057]具体地,上述挂载模块360,具体用于根据新的定时任务的定时时间和当前时间刻度指针对应的转盘刻度,计算新的定时任务对应的转盘刻度,将新的定时任务挂载到计算得到的转盘刻度上。
[0058]本发明实施例使用时间转盘达到了定时器的效果,并将对定时任务的处理放到线程上下文,能够处理存在睡眠和阻塞现象的任务,且无需针对任务数量的增加而增加线程,降低了对系统资源的耗费。
[0059]结合本文中所公开的实施例描述的方法中的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或【技术领域】内所公知的任意其它形式的存储介质中。
[0060]以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何熟悉本【技术领域】的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。
【权利要求】
1.一种利用时间转盘处理定时任务的方法,其特征在于,所述时间转盘中设置有当前时间刻度指针,所述方法包括以下步骤: 当监听到时间间隔触发器事件后,在所述时间转盘上移动所述当前时间刻度指针; 获取所述当前时间刻度指针对应的转盘刻度上挂载的定时任务,将所述定时任务转移到任务处理线程或任务处理线程池进行处理。
2.如权利要求1所述的方法,其特征在于,所述获取所述当前时间刻度指针对应的转盘刻度上挂载的定时任务之前,还包括: 判断所述当前时间刻度指针对应的转盘刻度上是否挂载有定时任务; 所述获取所述当前时间刻度指针对应的转盘刻度上挂载的定时任务之前,具体为: 当所述当前时间刻度指针对应的刻度上挂载有定时任务时,获取所述当前时间刻度指针对应的转盘刻度上挂载的定时任务。
3.如权利要求1所述的方法,其特征在于,还包括: 将新的定时任务挂载到所述时间转盘的转盘刻度上。
4.如权利要求3所述的方法,其特征在于,所述将新的定时任务挂载到所述时间转盘的转盘刻度上,具体为: 根据所述新的定时任务的定时时间和所述当前时间刻度指针对应的转盘刻度,计算所述新的定时任务对应的转盘刻度,将所述新的定时任务挂载到计算得到的转盘刻度上。
5.如权利要求1所述的方法,其特征在于,所述时间转盘是通过数组或环形的链表结构实现的。
6.—种利用时间转盘处理定时任务的装置,其特征在于,所述时间转盘中设置有当前时间刻度指针,所述装置包括: 监听模块,用于监听时间间隔触发器事件; 设置模块,用于在所述监听模块监听到时间间隔触发器事件后,在所述时间转盘上移动所述当前时间刻度指针; 获取模块,用于获取所述设置模块移动后的所述当前时间刻度指针对应的转盘刻度上挂载的定时任务; 转移模块,用于将所述获取模块获取到的所述定时任务转移到任务处理线程或任务处理线程池进行处理。
7.如权利要求6所述的装置,其特征在于,还包括: 判断模块,用于判断所述当前时间刻度指针对应的转盘刻度上是否挂载有定时任务; 所述获取模块,具体用于在所述判断模块判断出所述当前时间刻度指针对应的刻度上挂载有定时任务时,获取所述当前时间刻度指针对应的转盘刻度上挂载的定时任务。
8.如权利要求6所述的装置,其特征在于,还包括: 挂载模块,用于将新的定时任务挂载到所述时间转盘的转盘刻度上。
9.如权利要求8所述的装置,其特征在于, 所述挂载模块,具体用于根据所述新的定时任务的定时时间和所述当前时间刻度指针对应的转盘刻度,计算所述新的定时任务对应的转盘刻度,将所述新的定时任务挂载到计算得到的转盘刻度上。
10.如权利要求6所述的装置,其特征在于,所述时间转盘是通过数组或环形的链表结构实现的。
【文档编号】G06F9/44GK104503761SQ201410844083
【公开日】2015年4月8日 申请日期:2014年12月30日 优先权日:2014年12月30日
【发明者】李美欣 申请人:浪潮(北京)电子信息产业有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1