CN106406997B - 一种定时器调度方法和装置 - Google Patents

一种定时器调度方法和装置 Download PDF

Info

Publication number
CN106406997B
CN106406997B CN201610834472.6A CN201610834472A CN106406997B CN 106406997 B CN106406997 B CN 106406997B CN 201610834472 A CN201610834472 A CN 201610834472A CN 106406997 B CN106406997 B CN 106406997B
Authority
CN
China
Prior art keywords
timer
linked list
queue
head pointer
value
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.)
Active
Application number
CN201610834472.6A
Other languages
English (en)
Other versions
CN106406997A (zh
Inventor
余清炎
代瑞强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hangzhou H3C Technologies Co Ltd
Original Assignee
Hangzhou H3C Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hangzhou H3C Technologies Co Ltd filed Critical Hangzhou H3C Technologies Co Ltd
Priority to CN201610834472.6A priority Critical patent/CN106406997B/zh
Publication of CN106406997A publication Critical patent/CN106406997A/zh
Application granted granted Critical
Publication of CN106406997B publication Critical patent/CN106406997B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Measurement Of Unknown Time Intervals (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本申请提供一种定时器调度方法和装置,该方法为:在设定的时钟周期到达时,将全局变量T的值加1;之后在已生成的含有W个头指针的队列中确定第T+1个头指针,对第T+1个头指针所指向的定时器链表执行扫描操作,以及对新产生定时器执行插入操作;所述插入操作为:将新产生定时器加入到队列中的第N+1个头指针所指向的定时器链表,N为该定时器的时延与T的和值除以W后得到的余数;W为大于1的整数,T的取值范围为0至W‑1,T的初始值为所述取值范围中的任一整数,如果T加1达到W则将T重置为0。上述方法可以实现高效的定时器扫描和定时器插入操作,同时能及时处理超时的定时器。

Description

一种定时器调度方法和装置
技术领域
本申请涉及计算机软件技术的定时器领域,尤其涉及一种定时器调度方法和装置。
背景技术
定时器广泛应用于现代通信系统中。通常,系统要周期性地扫描定时器,当发现有定时器超时时,就对其执行超时处理,此过程称为定时器调度。
目前在计算机软件程序或者硬件的大量场景中均使用到了定时器。当系统中只有少量定时器时,传统的定时器调度方式,如单向链表方法、增量型双向链表方法等均能较好地实施。但是当系统中存在海量的(比如一万个)定时器时,传统的定时器调度方式就可能存在各种各样的问题,如定时器的扫描效率、插入效率低的问题。
发明内容
有鉴于此,本申请提供一种定时器调度方法,用以实现高效的定时器扫描以及高效的定时器插入操作,同时能及时处理超时的定时器。
具体地,本申请是通过如下技术方案实现的:
本申请第一方面,提供了一种定时器调度方法,所述方法包括:
在设定的时钟周期到达时,将全局变量T的值加1;
之后在已生成的含有W个头指针的队列中确定第T+1个头指针,对第T+1个头指针所指向的定时器链表执行扫描操作,以及对新产生定时器执行插入操作;W为大于1的整数,T的取值范围为0至W-1,T的初始值为所述取值范围中的任一整数,如果T加1后的值达到W则将T的值重置为0;
其中,所述插入操作为:将新产生定时器加入到所述队列中的第N+1个头指针所指向的定时器链表,N为该定时器的时延与T的和值除以W后得到的余数。
本申请第二方面,提供了一种定时器调度装置,具有实现上述方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。所述硬件或软件包括一个或多个与上述功能相对应的模块或单元。
一种可能的实现方式中,所述装置包括:
更新单元,用于在设定的时钟周期到达时,将全局变量T的值加1,如果T加1后的值达到W则将T的值重置为0;
处理单元,用于在所述更新单元对T的值进行更新之后,在已生成的含有W个头指针的队列中确定第T+1个头指针,对第T+1个头指针所指向的定时器链表执行扫描操作,以及对新产生定时器执行插入操作;W为大于1的整数,T的取值范围为0至W-1,T的初始值为所述取值范围中的任一整数;其中,所述插入操作为:将新产生定时器加入到所述队列中的第N+1个头指针所指向的定时器链表,N为该定时器的时延与T的和值除以W后得到的余数。
另一种可能的实现方式中,所述装置包括处理器和用于存储所述处理器可执行指令的存储器,所述存储器和所述处理器之间通过总线系统相互连接;所述处理器用于执行以下操作:
在设定的时钟周期到达时,将全局变量T的值加1;
之后在已生成的含有W个头指针的队列中确定第T+1个头指针,对第T+1个头指针所指向的定时器链表执行扫描操作,以及对新产生定时器执行插入操作;W为大于1的整数,T的取值范围为0至W-1,T的初始值为所述取值范围中的任一整数,如果T加1后的值达到W则将T的值重置为0;
其中,所述插入操作为:将新产生定时器加入到所述队列中的第N+1个头指针所指向的定时器链表,N为该定时器的时延与T的和值除以W后得到的余数。
通过本申请的以上技术方案,可以实现在每个时钟周期只扫描一个定时器链表,由此可以实现高效的定时器扫描操作,减少每个时钟周期内扫描的定时器的数量;在插入定时器时无需遍历整个定时器链表,由此可以实现高效的定时器插入操作;同时,新产生定时器的插入位置与该定时器的时延以及全局变量T的取值均相关,从而可以将新产生定时器插入到一个合适的位置,由此可以实现对超时的定时器的及时处理。
附图说明
图1是本申请提供的方法流程图;
图2是本申请实施例提供的一种队列的组织结构示意图;
图3是本申请实施例提供的一种全局变量T的更新流程和扫描流程的流程图;
图4至图10是基于图1所示的方法对定时器进行调度的示意图;
图11是本申请实施例提供的一种环形队列的组织结构示意图;
图12是本申请实施例提供的一种基于图12所示的环形队列对定时器进行调度的示意图;
图13是本申请实施例提供的一种定时器调度装置的功能模块框图;
图14是本申请实施例提供的另一种定时器调度装置的硬件架构图。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请范围的情况下,第一信息也可以被称为第二信息,类似地,第二信息也可以被称为第一信息。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。
以下,对本申请中的部分用语进行解释说明。
所谓的“定时器”,类似于日常生活中的闹钟,用于在达到一定时间后通知计算机程序去执行特定的事情。对于软件程序中使用的定时器,如果按照是否会重复使用这一维度,可以将定时器划分为循环定时器和非循环定时器。
“循环定时器”,用于使某种操作可以每隔一段时间执行一次,循环定时器超时之后需要复位,即将剩余时间重新设置为初始值。在边界网关协议(Border GatewayProtocol,BGP)、标签分发协议(Label Distribution Protocol,LDP)等通信协议中循环定时器多有应用,比如BGP邻居或者LDP邻居可以通过循环定时器,每隔一段时间便相互发送一个报文,用来通知对方自己仍然存活;又比如,当配置的BGP邻居或者LDP邻居没有建立时,BGP或者LDP协议可以通过循环定时器,每隔一段时间便尝试去重新建立邻居关系。
“非循环定时器”,用于在该定时器超时之后执行某种操作,非循环定时器超时之后会被删除。比如,当设备发生倒换协议进入平滑重启(GracefulRestart,GR)时,会启动一个非循环定时器,在该定时器超时之后会执行相关的老化操作,然后删除该定时器;又比如,在BGP邻居反复震荡的时候,为了避免反复的申请和释放内存,设备一般会在BGP邻居断开连接的时候启动一个非循环定时器,在该定时器超时之后才去释放该BGP邻居相关的内存,然后删除该定时器。
定时器的“时延”,指的是定时器预先设定的时长。定时器的“剩余时间”,指的是定时器距离超时还剩余的时长。本申请中,定时器的时延和剩余时间均以时钟周期为单位。例如,定时器的时延N指的是N个时钟周期,如果时钟周期是1秒,则时延是N秒,如果时钟周期是10毫秒,则时延是10*N毫秒。
下面结合说明书附图和各实施例对本申请技术方案进行说明。
针对传统的定时器调度方法存在的扫描效率、插入效率低的问题,公开号为CN101645024B、发明名称为《环形推进定时器调度方法》的专利方案提出了一种环形推进定时器调度方法,以实现高效的定时器扫描以及高效的定时器插入操作。
该专利方案的方法为:1、取整数m,确定建立W个定时器队列的头指针,建立环形队列,所述环形队列包含W个定时器链表,即W个定时器队列。2、建立全局的tickcount变量,并初始化为0。3、在每个最小时钟单位,对定时器进行一次扫描,同时tickcount变量自动加1。4、添加一个定时器时,将该定时器的时长与W做MOD运算得到N,将所述添加的定时器加入到第N个定时器队列的尾部。5、扫描定时器时,仅扫描第tickcount号链表,若链表为空,扫描直接结束;若不为空,则判断tickcount是否大于被扫描定时器的对应时长,如果是则该定时器超时,启动该定时器的超时任务;否则,直接将所述时长减去W-1。
但研究发现,该专利方案存在着一定缺陷,在某些场景下无法实现正确的功能。
例如,取W=1024,那么tickcount的范围为0~1023。假设当tickcount为100时,产生了一个时延为90的定时器。按照上述方法,该定时器将被添加到第N号定时器队列的尾部,其中,N=定时器的时延MOD W=90MOD 1024=90。该定时器会被挂在第90号队列中,但是tickcount从当前的100到再次变成90,需要经历1014个时钟周期,该定时器被扫描到时早已超时。
又例如,假设当tickcount为0时,将一个时延为100的定时器添加到第100号队列中。当经过100个时钟周期之后,tickcount变为100时,该定时器会被扫描到。按照该专利方案的方法,需要判断tickcount是否大于该定时器的时延,而本例中tickcount和该定时器的时延相等,因此此时该定时器并不符合超时处理的条件,导致该定时器需要再等待W个时钟周期才能启动超时任务。
可见,现有的环形推进定时器调度方法在某些场景下不能及时对超时的定时器进行处理,处理性能较低。
为此,本申请实施例提供了一种定时器的调度方法和装置,用以实现高效的定时器扫描以及高效的定时器插入操作,同时可以对超时的定时器进行及时处理。
如图1所示,本申请实施例提供的定时器调度方法的具体实现流程分为两个阶段:即准备阶段和调度阶段,调度阶段可以包括多个时钟周期,这两个阶段分别包括以下步骤:
一、准备阶段
第一步,生成一个含有W个头指针的队列,每个头指针指向一个定时器链表,W为大于1的整数。
如图2所示,为本申请实施例提供的一种队列的示意图,图中的每一个方框代表一个头指针,每一个圆代表一个定时器链表的头结点,系统产生的定时器将被组织在这W个链表中。
其中,用于存储W个头指针的队列可以采用数组、链表或其它形式的存储结构。定时器链表可以是单向链表,也可以是双向链表。
第二步,生成全局变量T,T的取值范围为[0,W-1],T的初始值可以是其取值范围中的任一整数。
二、调度阶段
1)全局变量T的更新流程。
当一个时钟周期到达后,需要修改T的值:T=(T+1)Mod W,其中Mod表示求余运算。即,当一个时钟周期到达后,将T的值加1,如果T加1后的值达到W则将T的值重置为0。
本申请实施例通过改变全局变量T的值,来改变每个时钟周期内的扫描位置和新产生的定时器的插入位置。
2)扫描流程
第一步,确定扫描位置。每一个时钟周期的扫描位置为所述队列中的第T+1个头指针所指向的定时器链表。
例如,当T=0时,对队列中的第一个头指针所指向的定时器链表执行扫描操作。当T=W-1时,对队列中的最后一个头指针所指向的定时器链表执行扫描操作。
由于本申请实施例每一个时钟周期系统只扫描一个定时器链表,因此可以实现高效的定时器扫描,减少每个时钟周期内需扫描的定时器的数量。
第二步,执行扫描操作。具体实现方式如下:
通过队列中第T+1个头指针遍历对应的定时器链表,如果该定时器链表为空,则结束本次扫描操作;如果该定时器链表不为空,则针对该定时器链表中的每个定时器分别执行:判断该定时器的剩余时间是否小于或者等于W,如果是则对该定时器进行超时处理,如果否则更新该定时器的剩余时间,即将该定时器的剩余时间减去W。
可选的,考虑到定时器可分为循环定时器和非循环定时器,因此在对定时器进行超时处理时可以结合定时器的循环属性,具体实现方式如下:
如果该超时的定时器为非循环定时器,则可以直接从该定时器链表中删除该定时器。如果该超时的定时器为循环定时器,则可以先从该定时器链表中删除该超时的定时器,然后将该定时器复位,并对复位后的定时器执行插入操作,插入操作的具体流程将在后文描述。
实际应用中,双向链表的删除效率要高于单向链表。因此定时器链表通常采用双向链表的形式,当需要删除某个定时器时,只需要通过双向链表的删除算法,直接将该定时器从定时器链表中摘除并销毁该定时器即可。
针对每一个时钟周期,上述全局变量T的更新流程和扫描流程的具体步骤参见图3所示,包括:
步骤301:确定一个时钟周期到达。
步骤302:判断T的当前值是否为W-1。
步骤303:如果步骤302的判断结果为是,则将T的值重置为0,然后跳转到步骤305。
步骤304:如果步骤302的判断结果为否,则将T的值加1,继续执行步骤305。
步骤305:通过队列中第T+1头指针遍历该头指针所指向的定时器链表,判断该定时器链表是否为空,如果是则结束本次扫描操作,如果否则执行步骤306。
步骤306:取该被扫描到的定时器链表中的第一个定时器。
步骤307:判断该取到的定时器的剩余时间是否小于或者等于W。
步骤308:如果步骤307的判断结果为否,则确定该定时器未超时,将该定时器的剩余时间减去W,然后跳转到步骤313。
步骤309:如果步骤307的判断结果为是,则确定该定时器超时,将该定时器从该定时器链表中摘除,继续执行步骤310。
步骤310:继续判断该定时器是否为循环定时器。
步骤311:如果步骤310的判断结果为是,则将该定时器复位,并通过计算将复位后的定时器插入到某个定时器链表中,然后跳转到步骤313。
步骤312:如果步骤310的判断结果为否,则将该定时器销毁,并继续执行步骤313。
步骤313:判断该定时器链表中是否存在下一个定时器,如果是则执行步骤314,如果否则结束本次扫描操作。
步骤314:取该定时器链表中的下一个定时器,并返回重新执行步骤307。
3)插入流程
第一步,确定新产生定时器的插入位置。
如果在当前的时钟周期内有新的定时器产生,则可以根据该新产生定时器的时延X、T的当前值以及队列包括的头指针的总数W,按照公式:N=(X+T)Mod W计算得到N,从而该新产生定时器的插入位置便是该队列中第N+1个头指针所指向的定时器链表。
第二步,执行插入操作。
定时器链表的每一个结点对应一个定时器,新产生定时器将被插入到定时器链表的一个新结点中,该新结点可以位于链表的任一位置,如链表的头部、中部或者尾部。由于新产生的定时器可以被插入到链表的任何位置,因此无需遍历整个链表来确定定时器的插入位置,从而定时器的插入效率较高。
对定时器执行插入操作时,可以先确定该定时器的时延和循环属性,然后将该定时器的剩余时间设置为该定时器的时延,例如,某定时器的时延为10,则该定时器的剩余时间的初始值即为10。最后,将该定时器的剩余时间、时延和循环属性联合存储到在插入流程的第一步确定出的定时器链表中。
将定时器的剩余时间、时延和循环属性联合存储,有利于循环定时器的快速复位。
下面通过对一具体实施例的描述,说明本申请的技术方案。
假定某一队列中包含的头指针的个数为1024,在T值为0时添加时延为100的非循环定时器A,在T值为10时添加时延为90的非循环定时器B,在T值为30时添加时延为70的循环定时器C,在T值为90时添加时延为1034的非循环定时器D,在T值为120时添加时延为1004的循环定时器E,则其处理过程如下:
1、当T值为0时,产生一个时延为100的非循环定时器A,根据上文描述的方法,该定时器A的时延与T的和值除以W后得到的余数为(100+0)Mod1024=100,故该定时器A将被加入到该队列中的第101个头指针所指向的定时器链表中,该定时器A的剩余时间为100。
处理完成之后,整个队列的结构如图4所示,其中,图中的每一个方框代表一个头指针,方框内的数字用于指示该头指针在队列中的位置,每一个圆代表一个定时器链表的结点,每个结点内均有两个数值,括号外的数值表示本定时器的时延,括号外的值表示本定时器的剩余时间,以及每个结点内还可以记载定时器的循环属性。
2、当T值为10时,产生一个时延为90的非循环定时器B,计算得到N=100,故该定时器B将被加入到该队列中的第101个头指针所指向的定时器链表中,该定时器B的剩余时间为90。处理完成后,整个队列的结构如图5所示,定时器A和定时器B在同一链表中。
3、当T值为30时,产生一个时延为70的循环定时器C,计算得到N=100,故该定时器C将被加入到该队列中的第101个头指针所指向的定时器链表中,该定时器C的剩余时间为70。处理完成后,整个队列的结构如图6所示,定时器A、定时器B和定时器C在同一链表中。
4、当T值为90时,产生一个时延为1034的非循环定时器D,计算得到N=100,故该定时器D将被加入到该队列中的第101个头指针所指向的定时器链表中剩余时间为1034。处理完成后,整个队列的结构如图7所示,定时器A、定时器B、定时器C和定时器D在同一链表中。
5、当T值为100时,此时发现扫描到的第101号定时器链表(即队列中的第101个头指针所指向的定时器链表)不为空,依次遍历在该第101号定时器链表下的所有定时器,判断定时器的剩余时间是否小于或者等于W即1024,如果小于或者等于1024则表示该定时器已经超时,需要进行超时处理,否则将定时器的剩余时间减去1024。
在本例中,时延分别为100、90和70的定时器A、定时器B和定时器C会超时,而时延为1034的定时器D不会超时,因此本次处理只会处理前三个定时器。非循环定时器A和非循环定时器B在从第101号定时器链表中删除后将被销毁。而循环定时器C在从第101号定时器链表中删除后将重新挂到另一定时器链表中,计算得到N=(70+100)Mod 1024=170,故该定时器C将被加入到该队列中的第171个头指针所指向的定时器链表中,该定时器B的剩余时间重新恢复为70。
处理完成后,整个队列的结构如图8所示。
6、当T值为120时,产生一个时延为1004的非循环定时器E,计算得到N=100,故该定时器E将被加入到该队列中的第101个头指针所指向的定时器链表中,该定时器E的剩余时间为1004。处理完成后,整个队列的结构如图9所示。
7、当T值为170时,此时发现扫描到的第171号定时器链表不为空,依次遍历在该第171号定时器链表下的所有定时器,判断定时器的剩余时间是否小于或者等于1024,如果小于或者等于1024则表示该定时器已经超时,需要进行超时处理,否则将该定时器的剩余时间减去1024。
在本例中,当T值为170时,时延为70的循环定时器C再次超时,其处理完毕后,再次计算得到N=(70+170)Mod 1024=240,因此循环定时器C继续被挂到第241号定时器链表中,其剩余时间恢复为70。处理完成后,整个队列的结构如图10所示。
后续对循环定时器C的处理类似于上述描述,不再一一说明。
9、当T值达到1023后,在一个时钟周期到达后,T值翻转重新置为0。
由上述过程可知,本申请实施例提供的定时器调度方法可以解决海量定时器的调度问题。并且可以实现在每个时钟周期只扫描一个定时器链表,由此可以实现高效的定时器扫描操作,减少每个时钟周期内扫描的定时器的数量;在插入定时器时无需遍历整个定时器链表,由此可以实现高效的定时器插入操作;同时,新产生定时器的插入位置与该定时器的时延以及全局变量T的取值均相关,从而可以将新产生定时器插入到一个合适的位置,由此可以实现对超时的定时器的及时处理。
在实际大部分的海量定时器场景中,定时器一般通过系统配置产生,往往具有相同的时延。针对这类具有相同时延的定时器,本申请实施例还提供了一种更加简便的定时器调度方法。假设在处理时延值均为X的海量定时器时,该方法可以使用定时器的时延值X作为队列中包含的头指针的数量,即令上述W=X。
下面,以队列为环形队列,全局变量T为全局指针T为例,对处理时延值均为X的定时器的过程进行介绍:
1、在准备阶段,生成一个含有X个头指针的环形队列,每个头指针指向一个定时器链表。然后生成一个全局指针T,所述全局指针T指向所述X个头指针中的任意一个。
如图11所示,为本申请实施例提供的一种环形队列的示意图,图中的每一个方框代表一个头指针,每一个圆代表一个定时器链表的头结点。
其中,全局指针T可理解为一种特殊的全局变量T。
2、在调度阶段的每个时钟周期到达时,将所述全局指针T更新为指向所述环形队列中的下一个头指针,之后针对所述全局指针T指向的头指针所对应的定时器链表执行扫描操作,以及对在当前时钟周期内新产生的定时器执行插入操作。
在执行插入操作时,首先需要确定定时器的插入位置。按照图1所示方法中的公式N=(X+T)Mod W,当W=X时,定时器的插入位置N可以确定是队列中的第T+1个头指针所指向的定时器链表,也即本申请实施例中的全局指针T所指向的头指针对应的定时器链表。基于此,本申请实施例中的插入操作为:将新产生的定时器加入到所述全局指针T指向的头指针所对应的定时器链表。
在执行扫描操作时,首先需要确定扫描位置。由于本申请实施例使用了全局指针T这一特殊的全局变量,因此全局指针T指向的头指针所对应的定时器链表即为待扫描的定时器链表。由于链表中的定时器的时延均为X,且每个定时器从被插入到链表到该链表被扫描到刚好经过了X个时钟周期,因此无需比较便能确定链表中所有的定时器均需进行超时处理。基于此,本申请实施例中的扫描操作为:判断所述全局指针T所指向的定时器链表是否为空,如果该链表为空,则结束本次扫描操作;如果该链表不为空,则直接对该定时器链表中的每个定时器进行超时处理。
同理,可以结合定时器的循环属性对定时器进行超时处理:如果该超时的定时器为非循环定时器,则可以直接从该定时器链表中删除该定时器并销毁该定时器;如果该超时的定时器为循环定时器,则可以直接将该定时器复位,仍将该定时器挂在当前的定时器链表中。
例如,如图12所示,假定某一环形队列中包含的头指针的个数为100,当一个时钟周期到达后,全局指针T从第1号头指针移向第2号头指针。从而对第2号头指针所指向的定时器链表进行扫描,扫描发现该链表包括2个定时器,分别为非循环定时器A和循环定时器B,系统分别对这两个定时器进行超时处理,定时器A被删除,定时器B重新复位。当在这个时钟周期内新产生一个非循环定时器C时,将定时器C也加入到全局指针T当前指向的第2号链表。处理完成后,定时器B和定时器C同在第2号链表中。其中,上述定时器A、定时器B和定时器C的时延均为100。
由上述过程可知,本申请实施例提供的用于调度相等时延的定时器的方法可以避免了繁琐的计算,简化了复杂的处理,有利于提高系统的稳定性。
以上对本申请提供的方法进行了描述。下面对本申请提供的装置进行描述。
参见图13,该图为本申请实施例提供的一种定时器调度装置的功能模块框图。所述装置包括更新单元131和处理单元132。
所述更新单元131,用于在设定的时钟周期到达时,将全局变量T的值加1,如果T加1后的值达到W则将T的值重置为0。
所述处理单元132,用于在所述更新单元131对T的值进行更新之后,在已生成的含有W个头指针的队列中确定第T+1个头指针,对第T+1个头指针所指向的定时器链表执行扫描操作,以及对新产生定时器执行插入操作;W为大于1的整数,T的取值范围为0至W-1,T的初始值为所述取值范围中的任一整数;
其中,所述扫描操作为:如果该定时器链表为空,则结束本次扫描操作;如果该定时器链表不为空,则针对该定时器链表中的每个定时器分别执行:判断该定时器的剩余时间是否小于或者等于W,如果是则对该定时器进行超时处理,如果否则将该定时器的剩余时间减去W;
所述插入操作为:将新产生定时器加入到所述队列中的第N+1个头指针所指向的定时器链表,N为该定时器的时延与T的和值除以W后得到的余数。
可选的,当调度的定时器的时延均一致时,可以将所述W取作调度的定时器的时延。
可选的,当所述队列为环形队列时,所述全局变量T可以为全局指针T。
例如,所述更新单元131可以用于:在已生成的含有W个头指针的环形队列中,将全局指针T更新为指向所述环形队列中的下一个头指针。
相应的,所述处理单元132具体用于:在所述更新单元131对全局指针T进行更新之后,针对所述全局指针T指向的头指针所对应的定时器链表执行扫描操作,以及对新产生定时器执行插入操作;所述全局指针T初始指向所述W个头指针中的任意一个;所述扫描操作为:如果该定时器链表为空,则结束本次扫描操作;如果该定时器链表不为空,则对该定时器链表中的每个定时器进行超时处理;所述插入操作为:将新产生定时器加入到所述全局指针T指向的头指针所对应的定时器链表。
可选的,在对定时器进行超时处理时,所述处理单元132具体用于:如果该定时器为非循环定时器,则从该定时器链表中删除该定时器;如果该定时器为循环定时器,则从该定时器链表中删除该定时器,将该定时器复位,并对复位后的定时器执行所述插入操作。
可选的,在将新产生定时器加入到所述队列中的第N+1个头指针所指向的定时器链表时,所述处理单元132具体用于:确定新产生定时器的时延和循环属性;将所述新产生定时器的剩余时间设置为所述新产生定时器的时延;将所述新产生定时器的剩余时间、时延和循环属性联合存储到所述第N+1个头指针所指向的定时器链表中。
本申请定时器调度装置的实施例可以应用在任何具有处理器的电子设备上,所述电子设备可以是现有的、正在研发的或将来研发的任何电子设备,包括但不限于:现有的、正在研发的或将来研发的台式计算机、膝上型计算机、移动终端(包括智能手机、非智能手机、各种平板电脑)等。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在带有处理器的电子设备的处理器将存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图14所示,为本申请定时器调度装置所在带有处理器的电子设备的一种硬件结构图,除了图14所示的处理器、内存、以及存储器之外,实施例中装置所在的带有处理器的电子设备通常根据该设备的实际功能,还可以包括其他硬件,对此不再赘述。
其中,存储器中可以存储有定时器调度方法对应的逻辑指令,该存储器例如可以是非易失性存储器(non-volatile memory)。处理器可以调用执行存储器中的保存的逻辑指令,以执行上述的定时器调度方法。
定时器调度方法对应的逻辑指令的功能,如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
如图14所示,本申请实施例还提供一种定时器调度装置,所述装置包括处理器141和存储器142,例如,所述处理器141和所述存储器142通过总线143相互连接。
所述存储器142用于存储所述处理器141的可执行指令。
所述处理器141被配置为:
在设定的时钟周期到达时,执行以下处理流程:将全局变量T的值加1;之后在已生成的含有W个头指针的队列中确定第T+1个头指针,对第T+1个头指针所指向的定时器链表执行扫描操作,以及对新产生定时器执行插入操作;W为大于1的整数,T的取值范围为0至W-1,T的初始值为所述取值范围中的任一整数,如果T加1后的值达到W则将T的值重置为0;其中,所述插入操作为:将新产生定时器加入到所述队列中的第N+1个头指针所指向的定时器链表,N为该定时器的时延与T的和值除以W后得到的余数。
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本申请方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。

Claims (12)

1.一种定时器调度方法,其特征在于,包括:
在设定的时钟周期到达时,将全局变量T的值加1;
之后在已生成的含有W个头指针的队列中确定第T+1个头指针,对第T+1个头指针所指向的定时器链表执行扫描操作,以及对新产生定时器执行插入操作;W为大于1的整数,T的取值范围为0至W-1,T的初始值为所述取值范围中的任一整数,如果T加1后的值达到W则将T的值重置为0;
其中,所述插入操作为:将新产生定时器加入到所述队列中的第N+1个头指针所指向的定时器链表,N为该定时器的时延与T的和值除以W后得到的余数;
所述对第T+1个头指针所指向的定时器链表执行扫描操作,包括:如果该定时器链表不为空,则针对该定时器链表中的每个定时器分别执行:判断该定时器的剩余时间是否小于或者等于W,如果是则对该定时器进行超时处理,如果否则将该定时器的剩余时间减去W。
2.如权利要求1所述的方法,其特征在于,所述对第T+1个头指针所指向的定时器链表执行扫描操作,包括:
如果该定时器链表为空,则结束本次扫描操作。
3.如权利要求1所述的方法,其特征在于,当调度的定时器的时延均一致时,所述W为定时器的时延。
4.如权利要求3所述的方法,其特征在于,当所述队列为环形队列时,所述全局变量T为全局指针T。
5.如权利要求2所述的方法,其特征在于,所述对定时器进行超时处理包括:
如果该定时器为非循环定时器,则从该定时器链表中删除该定时器;
如果该定时器为循环定时器,则从该定时器链表中删除该定时器,将该定时器复位,并对复位后的定时器执行所述插入操作。
6.如权利要求1-5中任一项所述的方法,其特征在于,所述将新产生定时器加入到所述队列中的第N+1个头指针所指向的定时器链表包括:
确定新产生定时器的时延和循环属性;
将所述新产生定时器的剩余时间设置为所述新产生定时器的时延;
将所述新产生定时器的剩余时间、时延和循环属性联合存储到所述第N+1个头指针所指向的定时器链表中。
7.一种定时器调度装置,其特征在于,包括:
更新单元,用于在设定的时钟周期到达时,将全局变量T的值加1,如果T加1后的值达到W则将T的值重置为0;
处理单元,用于在所述更新单元对T的值进行更新之后,在已生成的含有W个头指针的队列中确定第T+1个头指针,对第T+1个头指针所指向的定时器链表执行扫描操作,以及对新产生定时器执行插入操作;W为大于1的整数,T的取值范围为0至W-1,T的初始值为所述取值范围中的任一整数;其中,所述插入操作为:将新产生定时器加入到所述队列中的第N+1个头指针所指向的定时器链表,N为该定时器的时延与T的和值除以W后得到的余数;在对第T+1个头指针所指向的定时器链表执行扫描操作时,如果该定时器链表不为空,则针对该定时器链表中的每个定时器分别执行:判断该定时器的剩余时间是否小于或者等于W,如果是则对该定时器进行超时处理,如果否则将该定时器的剩余时间减去W。
8.如权利要求7所述的装置,其特征在于,在对第T+1个头指针所指向的定时器链表执行扫描操作时,所述处理单元具体用于:
如果该定时器链表为空,则结束本次扫描操作。
9.如权利要求7所述的装置,其特征在于,当调度的定时器的时延均一致时,所述W为定时器的时延。
10.如权利要求9所述的装置,其特征在于,当所述队列为环形队列时,所述全局变量T为全局指针T。
11.如权利要求8所述的装置,其特征在于,在对定时器进行超时处理时,所述处理单元具体用于:
如果该定时器为非循环定时器,则从该定时器链表中删除该定时器;
如果该定时器为循环定时器,则从该定时器链表中删除该定时器,将该定时器复位,并对复位后的定时器执行所述插入操作。
12.如权利要求7-11中任一项所述的装置,其特征在于,在将新产生定时器加入到所述队列中的第N+1个头指针所指向的定时器链表时,所述处理单元具体用于:
确定新产生定时器的时延和循环属性;
将所述新产生定时器的剩余时间设置为所述新产生定时器的时延;
将所述新产生定时器的剩余时间、时延和循环属性联合存储到所述第N+1个头指针所指向的定时器链表中。
CN201610834472.6A 2016-09-20 2016-09-20 一种定时器调度方法和装置 Active CN106406997B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610834472.6A CN106406997B (zh) 2016-09-20 2016-09-20 一种定时器调度方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610834472.6A CN106406997B (zh) 2016-09-20 2016-09-20 一种定时器调度方法和装置

Publications (2)

Publication Number Publication Date
CN106406997A CN106406997A (zh) 2017-02-15
CN106406997B true CN106406997B (zh) 2020-03-06

Family

ID=57998046

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610834472.6A Active CN106406997B (zh) 2016-09-20 2016-09-20 一种定时器调度方法和装置

Country Status (1)

Country Link
CN (1) CN106406997B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109697592B (zh) * 2018-12-21 2021-04-30 江苏满运软件科技有限公司 基于环形数组的货源下架方法、系统、设备及存储介质
CN114785714B (zh) * 2022-03-01 2023-08-22 阿里巴巴(中国)有限公司 一种报文传输时延检测方法、存储介质及设备
CN115098198B (zh) * 2022-06-30 2024-07-12 天津津航计算技术研究所 一种大量定时器实现方法
CN115934000B (zh) * 2023-03-07 2023-06-09 苏州浪潮智能科技有限公司 一种存储系统的定时方法及相关装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1545308A (zh) * 2003-11-25 2004-11-10 中兴通讯股份有限公司 多二叉树循环定时器调度方法
CN1852131A (zh) * 2005-07-06 2006-10-25 华为技术有限公司 一种定时器调度方法
CN101645024A (zh) * 2009-08-21 2010-02-10 无锡威泰迅电力科技有限公司 环形推进定时器调度方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100570568C (zh) * 2007-01-12 2009-12-16 中兴通讯股份有限公司 用于实时操作系统的定时方法和系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1545308A (zh) * 2003-11-25 2004-11-10 中兴通讯股份有限公司 多二叉树循环定时器调度方法
CN1852131A (zh) * 2005-07-06 2006-10-25 华为技术有限公司 一种定时器调度方法
CN101645024A (zh) * 2009-08-21 2010-02-10 无锡威泰迅电力科技有限公司 环形推进定时器调度方法

Also Published As

Publication number Publication date
CN106406997A (zh) 2017-02-15

Similar Documents

Publication Publication Date Title
CN106406997B (zh) 一种定时器调度方法和装置
CN102279888B (zh) 一种任务调度方法和系统
CN101707639B (zh) 闹钟设置方法及装置
US10691496B2 (en) Dynamic micro-services related job assignment
CN108319499B (zh) 任务调度方法及装置
CN109656725B (zh) 消息消费者切换方法、装置、存储介质及电子设备
CN110910237B (zh) 区块链中的数据处理方法、装置及智能终端、存储介质
CN109558230A (zh) 一种分布式定时任务调度系统及方法
CN109766194A (zh) 基于消息的低耦合计划任务组件的实现方法及其系统
CN111143053A (zh) 一种定时任务的调度方法、服务器以及存储装置
CN109426554B (zh) 一种服务器的定时实现方法及装置
WO2016107102A1 (zh) 短信并发业务处理方法及装置
CN111158930A (zh) 一种基于Redis的高并发延时任务系统和处理方法
CN109542917B (zh) 数据读取方法及计算机可读介质
CN111200651A (zh) 定时调用微服务的方法、系统、设备和介质
CN116974728B (zh) 单片机任务调度方法、单片机产品及存储介质
CN113596107A (zh) 一种基于区块链的数据同步方法和装置
CN111880910A (zh) 数据处理方法及装置、服务器及存储介质
CN108228240B (zh) 多任务队列中任务的处理方法和装置
CN112000492B (zh) 公众号用户标签的管理系统及方法
CN112631781A (zh) 一种算子执行方法、装置、电子设备及存储介质
WO2021073756A1 (en) Read access for computational results of a distributed network
CN118626234B (zh) 操作响应方法和操作响应装置
CN109710390A (zh) 单线程处理器的多任务处理方法及处理系统
CN116405566A (zh) 一种基于容器云的分布式调度方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No.

Applicant after: Xinhua three Technology Co., Ltd.

Address before: 310052 Binjiang District Changhe Road, Zhejiang, China, No. 466, No.

Applicant before: Huasan Communication Technology Co., Ltd.

GR01 Patent grant
GR01 Patent grant