CN1963766A - 一种定时器调度方法 - Google Patents

一种定时器调度方法 Download PDF

Info

Publication number
CN1963766A
CN1963766A CN 200610161165 CN200610161165A CN1963766A CN 1963766 A CN1963766 A CN 1963766A CN 200610161165 CN200610161165 CN 200610161165 CN 200610161165 A CN200610161165 A CN 200610161165A CN 1963766 A CN1963766 A CN 1963766A
Authority
CN
China
Prior art keywords
timer
sparse matrix
duration
row
benchmark
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.)
Granted
Application number
CN 200610161165
Other languages
English (en)
Other versions
CN100458706C (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.)
JUPHOON Corp
Original Assignee
JUPHOON Corp
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 JUPHOON Corp filed Critical JUPHOON Corp
Priority to CNB2006101611652A priority Critical patent/CN100458706C/zh
Publication of CN1963766A publication Critical patent/CN1963766A/zh
Application granted granted Critical
Publication of CN100458706C publication Critical patent/CN100458706C/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种定时器调度方法,关键在于,设置基准定时器和用于定时器管理的稀疏矩阵,将需使用的定时器根据定时器时长放置于稀疏矩阵的相应位置,未放置定时器的位置稀疏矩阵元素置为零;每次基准定时器触发时,判断稀疏矩阵中对应当前时刻的矩阵元素值是否为零,如果不为零,则对该元素下的所有定时器执行超时处理;如果为零,则等待下一次基准定时器触发。采用该方法能在降低***资源消耗的同时,提高定时器的管理和注册效率,且具有良好的时间扩展性。

Description

一种定时器调度方法
技术领域
本发明涉及定时器技术,特别是涉及一种定时器的调度管理方法。
背景技术
目前,在很多需要异步执行若干操作的***中,比如:异步执行多个任务的软件***,异步实现特定服务功能的网络通信***等等,都需要利用定时器对各个操作进行同步和管理。譬如,在网络通信***中,有时为了给一个用户提供某项特定功能服务,会使用到几个、十几个甚至更多的定时器。
在实际操作中,由于任务或动作的级别不同,对定时器的要求也有所不同。以软件***为例,首先,对时间精度的要求不同。处于***核心级别的任务时间精度要求在10毫秒级别,而处于用户级别或业务级别的任务时间精度要求在100毫秒级别。其次,对数量的要求不同。***核心任务只需要几个或十几个定时器,而用户级别或业务级别通常需要成百上千甚至十万级别数量的定时器。
对于定时器的管理,从实现方式上来看,定时器通常被设计为单一的模式。即:在整个***中,定时器的功能在一个单一模块中实现,***中所有的定时请求都由这个模块来完成。并且,为了保证定时功能的准确性,通常会给定时模块对应的任务设计较高优先级,但这种方法存在较高优先级需要消耗更多资源的问题。在提供大量定时服务时,这个问题将会尤为突出,甚至会因为业务级别的任务影响到通讯***核心任务的稳定和安全,特别是在电信级别的***上更加不允许这种情况出现。
从调度方法来看,定时器通常包括以下几种类型:
第一种是线性模式,这种模式下,定时器***预先申请连续空间作为管理结构,每个逻辑空间间隔和其所代表的时间间隔存在着线性的关系。所申请的连续空间可采用数组、队列、栈等方式实现,以数组为例,数组的每个元素代表一个特定的超时时间,比如10毫秒。那么,需要用到10毫秒、20毫秒、50毫秒、80毫秒定时器时,则组织成如图1所示的管理结构。在这种模式下添加定时器,就是将定时器添加到相应数组元素下,比如:添加30毫秒的定时器,就将定时器添加到数组的第四个元素下。并且,在每个计时周期,向前移动一个元素,对当前元素下的所有定时器执行超时处理,如果到达最后一个元素则循环回第一个元素重新开始。
这种模式的定时器管理结构是一个线性的环状结构,每次添加定时器时可直接通过计算确定添加的位置,因此,在定时器注册和***管理方面的处理简单且高效,时间利用率高。但是,这种模式最显著的问题就是:空间利用率低,导致时间上扩展性差。
第二种是非线性模式,这种模式下,所有的定时器按照超时时间的先后顺序排成一个顺序链表或者其它类似形式。其中,每个元素的逻辑空间间隔和其所代表的时间间隔不存在线性关系。那么,需要用到10毫秒、20毫秒、50毫秒、80毫秒定时器时,则组织成如图2所示的管理结构。以链表为例,在每个计时周期,检查链表的头节点是否超时,如果超时,则执行超时处理程序;如果没有超时,则等待进入下一个计时周期。
这种模式解决了时间上扩展的问题,但是,由于每次添加定时器都需要从表头一个一个查找才能确定添加位置,因此,定时器注册的效率不高,尤其在管理大量定时器时会产生效率瓶颈。
第三种是利用二叉树等数据结构来组织定时器,将定时器按超时时间大小组织成如图3所示的管理结构,由于左子树的超时时间均小于右子树的超时时间,每次添加定时器时可通过折半查找的方式确定添加位置,如此,能提高定时器注册效率。
这种模式以牺牲空间的利用率来提高时间的利用率,从理论分析上可以提高平均的效率。但在实际的使用中,由于定时器时间分布不可能成为平均分布,绝大多数情况下定时器都是时长较短的,这样二叉树的查找效率并不一定比顺序链表高,所以效果并不理想。
发明内容
有鉴于此,本发明的主要目的在于提供一种定时器调度方法,在降低***资源消耗的同时,提高定时器的管理和注册效率,且具有良好的时间扩展性。
为达到上述目的,本发明的技术方案是这样实现的:
一种定时器调度方法,关键在于:设置基准定时器和用于定时器管理的稀疏矩阵,将需使用的定时器根据定时器时长放置于稀疏矩阵的相应位置,未放置定时器的位置稀疏矩阵元素置为零;每次基准定时器超时时,判断稀疏矩阵中对应当前时刻的矩阵元素值是否为零,如果不为零,则对该元素下的所有定时器执行超时处理;如果为零,则等待下一次基准定时器超时。
该方法进一步包括:在使用定时器之前,由定时器***创建定时器,并为所创建的定时器分配唯一的标识,初始化定时器控制块信息的存储空间。其中,所述控制块信息包括定时器标识、定时器状态、类型、时长、用户定义类型和参数。
该方法进一步包括:在使用定时器之前,设定所使用定时器的定时器时长。
上述方案中,所述将定时器放置于稀疏矩阵的相应位置为:根据所使用定时器的定时器时长、基准定时器时长、稀疏矩阵的行数或列数计算所要放置定时器在稀疏矩阵中的行、列坐标;之后,将所使用的定时器放置于稀疏矩阵中计算出的行、列坐标对应的元素下。其中,所述计算行、列坐标为:用所使用定时器的定时器时长与基准定时器时长之商除以稀疏矩阵的行数,将所得到的余数作为行坐标,所得到的商作为列坐标;或者,用所使用定时器的定时器时长与基准定时器时长之商除以稀疏矩阵的列数,将所得到的商作为行坐标,所得到的余数作为列坐标。每次使用同一定时器时,设定的定时器时长不同。
上述方案中,所述稀疏矩阵由三元组表、带行表的三元组表、环形链表、十字链表实现。
该方法进一步包括:根据要使用定时器的定时器时长在稀疏矩阵中的相应位置添加要使用的定时器;或者,根据要删除定时器的定时器时长从稀疏矩阵中的相应位置删除要删除的定时器,并确定该位置是否还存在定时器,在不存在定时器时,将该位置的元素值置为零;或者,根据要使用的新定时器的定时器时长在稀疏矩阵中的相应位置添加要使用的定时器,根据原定时器的定时器时长从稀疏矩阵中的相应位置删除该定时器,并确定原定时器所在位置是否还存在定时器,在不存在定时器时,将该位置的元素值置为零。
该方法进一步包括:设置校准定时器,校准定时器触发时,根据实际处理状态和理想处理状态的差异调整稀疏矩阵中定时器的位置。
本发明所提供的定时器调度方法,仅向当前应用***注册一个基准定时器,其它所有需要使用的定时器全部由定时器***来创建、调度、管理,向***注册的基准定时器用于驱动定时器***对超时定时器进行超时处理,以完成大容量的定时服务。本发明方法具有以下优点和特点:
1)本发明的方法只向当前应用***注册一个基准定时器,与现有技术中所有定时器都必须向应用***注册的做法不同,因此可保证时间利用率,且在保证定时器准确性和较高运行级别的情况下,不仅减少***对定时器任务的执行时间,还将定时器对***核心的需求减少到一个定时器的资源占用,减少了超时处理的资源开销和任务之间的通讯开销,增强了整个软件***或通讯***的稳定性。
2)本发明所述定时器是基于软件实现的定时器,可满足各种不同场合和平台的应用需要,尤其是在大并发量的、对应不同高低精度的大跨度的定时器应用场合中,具有很大的灵活性、良好的可测试性和可维护性。同时,在资源开销和执行效率方面得到较大的提升。
3)本发明的基准定时器可以使用***核心提供的定时器,或者以中断形式提供的定时功能,如此可为定时器***提供高度灵活性。
4)本发明的定时器管理结合了线性模式和非线性模式优势,由于时间间隔较短的定时器在使用中占绝大多数,因此将时间间隔较短的定时器组织在一个线性的结构中,在定时器注册时实现高效率;并且,将时间间隔较长的由非线性的结构管理,提供良好的时间扩展性。随着时间的变化,原来时间间隔较长的定时器还可在适当的时候,自动从非线性的结构中转换到线性的结构中。显然,本发明的调度方法可将定时器处理效率保持在线性模式的水平上,进而提升整个定时器***的处理效率。
5)本发明方法中采用稀疏矩阵的方式作为定时器的管理结构,可以采用多种形式具体实现,比如:采用环形链表、十字链表等等,实现起来简单、方便、灵活。
6)本发明方法可通过将定时器***实例化的方式具体实现,并可采用基准定时器触发实例化后的定时器***,如此,可提高定时器的管理效率和定时器注册处理效率;且***中每个任务的定时服务都由实例化的定时器***来承担,将为用户或业务任务提供定时服务所消耗的资源从***核心部分分离出来,降低了对***核心部分的依赖。
7)本发明方法采用实例化的定时器***实现时,能隔离不同用户或业务任务的定时服务,使之不会相互干扰,也相应避免了这些任务之间的同步开销,提高了整体***的运作效率,能支持数量巨大的定时器处理。
8)本发明对于时间间隔较长、定时精度要求较高的应用,进一步在定时器***中加入动态补偿机制,以弥补间隔较长的定时器存在的误差。
附图说明
图1为现有技术中线性模式下定时器的管理结构示意图;
图2为现有技术中非线性模式下定时器的管理结构示意图;
图3为现有技术中采用二叉树结构管理定时器的管理结构示意图;
图4为本发明中采用稀疏矩阵管理定时器的管理结构示意图;
图5为本发明方法具体实施例的实现原理图。
具体实施方式
本发明的基本思想是:设置基准定时器和用于定时器管理的稀疏矩阵,将用户或业务使用到的定时器根据定时器时长放置于稀疏矩阵的相应位置,未放置定时器的位置稀疏矩阵元素置为零;每次基准定时器超时时,判断稀疏矩阵中对应当前时刻的矩阵元素值是否为零,如果不为零,说明此位置包含有定时器,则对该元素下的所有定时器执行超时处理;如果为零,则等待下一次基准定时器超时触发。
这里,基准定时器为一个固定时长的定时器,基准定时器是向当前应用***核心部分注册的,该基准定时器以固定时间间隔重复触发。所述稀疏矩阵是根据用户或业务实际使用的定时器数目创建的、用于定时器管理的数据结构。
所述放置于稀疏矩阵中的定时器为用户或业务要使用到的定时器,由定时器***创建,每个定时器在创建时会被分配一个标识,该标识能区分对哪个定时器进行操作,唯一标识每个定时器。在创建之后对每个定时器的所有操作中,如:注册、停止、删除等,都需要将相应定时器的标识发送给定时器***。通常,在使用定时服务之前,定时器***会为每个定时服务先创建一个或一个以上定时器,在创建每个定时器时分配并初始化定时器的相关资源,然后将定时器标识返回给用户。其中,所述定时器***是指用于创建、管理、调度定时器,完成本发明定时器调度方法的软件模块,可以通过实例化等不同方式具体实现;所述相关资源是指定时器控制块信息的存储空间;所述控制块信息包括定时器标识、定时器状态、类型、时长、用户定义类型和参数等信息。
定时器在初始创建时,只是创建了一个数据结构,定时器时长并未确定,所以新创建的定时器并不添加到稀疏矩阵中。当用户或业务使用某个定时器时,则设定所使用定时器的定时器时长并启动该定时器,同时,定时器***根据所设定的定时器时长将相应定时器添加到稀疏矩阵中对应的位置,即放置在稀疏矩阵中相应的元素下,比如:以稀疏矩阵中相应元素为链表头生成链表,每个定时器对应一个链表节点,挂在链表头之后,具体的行列坐标值与定时器时长相关;矩阵中的零元素位置表示没有用到相应时长的定时器。对于每个创建的定时器,可以多次启动,且每次可以设定不同的定时器时长,但多次启动不能同时进行,也就是说,下一次启动必须在上一次启动的定时器操作完成后才能开始。定时器操作完成一般有两种方式:一种是定时器超时,并完成超时处理之后;另一种是用户主动停止定时器。
通常,定时器***在实现定时器的创建、调度、管理之前,还需设置定时器中用户任务信息,包括任务标识、超时处理方法等信息,将收到的定时器消息或中断交由定时器***来处理。
本发明定时器的调度方法可以通过不同的方式实现,比如:将定时器***实例化,采用实例化后的定时器***完成对所有定时器的创建、管理和调度。实例化的定时器***由基准定时器触发,并且,采用稀疏矩阵作为定时器管理结构。这里,所谓将定时器***实例化就是:将所有定时服务按照属性划分为一类或几类对象,譬如:按照定时器时长或定时器应用场合等属性划分,对每类对象按预定的策略进行统一地管理。每个任务需要用到定时服务时,就向实例化后的定时器***申请,实例化后的定时器***创建定时器,在使用时设定定时器时长,并将所使用的定时器根据定时器时长放置于稀疏矩阵中。以下均以实例化定时器***的方式实现本发明定时器调度方法为例进行说明。
在具体实现中,定时器***所采用的稀疏矩阵也存在不同的设计方式,比如:行数固定、列数可扩展,或是列数固定、行数可扩展等等。假定矩阵的行坐标为i,列坐标为j,基准定时器时长为T0,超时时间为T,则采用行数固定、列数可扩展的稀疏矩阵时,超时时间与行列坐标满足公式(1)的关系:
T=(j×行数+i)×T0    (1)
采用列数固定、行数可扩展的稀疏矩阵时,超时时间与行列坐标满足公式(2)的关系:
T=(i×列数+j)×T0    (2)
当然,具体行数或列数固定为多少,一般要根据具体的应用来确定,与基准定时器时长的大小以及所用到的定时器最大时长都有关系。
相应的,在初始构造稀疏矩阵或将新注册定时器的值放置到稀疏矩阵时,定时器在稀疏矩阵的放置位置可通过新注册定时器的时长、基准定时器时长和行数/列数计算得出。当采用行数固定、列数可扩展的稀疏矩阵时,新注册定时器在稀疏矩阵中的行、列坐标通过公式(3)计算得出;当采用列数固定、行数可扩展的稀疏矩阵时,新注册定时器在稀疏矩阵中的行、列坐标通过公式(4)计算得出:
(定时器时长÷基准定时器时长)÷行数    (3)
(定时器时长÷基准定时器时长)÷列数    (4)
其中,对于行数固定的情况,公式(3)得到的余数为行坐标,公式(3)得到的商为列坐标;对于列数固定的情况,公式(4)得到的商为行坐标,公式(4)得到的余数为列坐标。
举个具体例子,假设:当前向实例化的定时器***注册的定时器有20ms、40ms、50ms、80ms、100ms、120ms和150ms的定时器,基准定时器为10ms定时器,行数固定为5行,则可构造出如图4所示的5行4列的稀疏矩阵。其中,第1行第1列元素的行列坐标为(0,0),那么,根据公式(3)计算,20ms的定时器放置在第3行第1列,行列坐标为(2,0);50ms的定时器放置在第1行第2列,行列坐标为(0,1),其它定时器的行列坐标依此类推。当然,此稀疏矩阵也可以构造为3行6列、4行4列等等,只要能容纳下所有可能用到的定时器即可。
稀疏矩阵构造好后,每次基准定时器触发时,定时器***就判断稀疏矩阵中对应当前时刻的矩阵元素值是否为非零值,如果是非零值,则定时器***确定对超时的处理方式,并采用所确定的方式对相应定时器执行超时处理;如果是零,则等待下一次基准定时器触发。
定时器***可以按行优先或列优先的方式对稀疏矩阵中的定时器进行访问,一般,行数固定时,定时器***以列优先方式访问;列数固定时,定时器***以行优先方式访问。从逻辑上看,访问过程是一个螺旋前进的过程,如果矩阵相应元素下有定时器,就进行超时处理;如果没有,则等待下一次基准定时器触发。
定时器***在完成超时判断和超时处理操作的同时,或者在每次基准定时器触发间隔中,还进一步完成定时器的更新操作,包括定时器的添加、删除和修改。其中,所述添加就是:定时器***判断是否有新注册的定时器,如果有,则根据新注册定时器的时长、基准定时器的时长以及稀疏矩阵的行数/列数计算定时器放置的行、列坐标,然后将新注册定时器值放置到稀疏矩阵中的相应位置上。通常可在稀疏矩阵的相应位置设置链表、或数组、或其它类似的数据结构,每个定时器对应数据结构中的一个节点,将定时器的控制块信息存储于相应节点中,其中控制块信息包括定时器标识、状态、类型、时长、用户定义类型和参数。添加时,如果相应位置上原矩阵元素值为零,则创建一个数据结构节点,比如创建链表节点,将该矩阵元素作为链表头,指向所创建的节点;如果相应位置上原矩阵元素值不为零,则创建数据结构节点,比如创建链表节点,之后将所创建的节点***到链表尾部,所创建的节点中存储有相应定时器的控制块信息。
相应的,所述删除就是:定时器***判断是否有用户或任务指令要删除的定时器,如果有,则根据要删除定时器的标识得到定时器的控制块信息,然后将稀疏矩阵中相应位置上的定时器删除,如果该矩阵元素下没有其它定时器则将元素值置为零。
所述修改就是:定时器***判断是否有用户或任务指令要修改的定时器,如果有,则根据要修改定时器的标识得到定时器的控制块信息,根据新定时器的时长、基准定时器的时长以及稀疏矩阵的行数/列数,计算出要修改定时器新的行、列坐标,然后将稀疏矩阵中原行、列坐标上的定时器删除,并在新行、列坐标的位置上放置修改后的定时器,如果原定时器所在矩阵元素下没有其它定时器,则将相应矩阵元素的值置为零。这里,将新定时器放置在新行、列坐标的位置上具体操作是:如果新行、列坐标位置上原矩阵元素值为零,则放置是创建数据结构节点,比如创建链表节点,将该矩阵元素作为链表头,指向所创建的节点;如果新行、列坐标位置上原矩阵元素值不为零,则放置是创建数据结构节点,比如创建链表节点,然后将所创建的节点***到链表尾部,所创建的节点中存储有相应定时器的控制块信息。
在实际应用中,稀疏矩阵的具体实现方案可以有很多种形式,比如:三元组表、带行表的三元组表、环形链表、十字链表等等。下面以采用环形链表实现稀疏矩阵为例,详细说明本发明定时器调度方法的实现过程。并且,在下述实施例中,以行数固定、列数可扩展的稀疏矩阵为例,对于列数固定、行数可扩展的稀疏矩阵的实现原理基本相同。
如图5所示,构造一个环形链表,链表上每个节点的值为基准定时器时长的整数倍,环中节点的数量通常根据具体的应用场景来确定的。一般情况下,环的长度应能容纳95%的定时器。举例来说,在网络的一个典型呼叫过程中,可能用到0.5s、1s、2s、4s、8s、16s、32s和大于3分钟等长度的定时器,但其中大于32秒的定时器很少用到,则可将环的长度定为能容纳32秒定时器的长度。比如:为保证平均误差小于5%,设置基准定时器时长为0.1s,环上设置320个节点。当然,也可以设置基准定时器时长为0.25s、0.5s等。
如果考虑到资源占用最少的原则,一般会以最小定时器时长或所有定时器时长的最大公约数为基准定时器时长。当然,在大多数情况下,最小定时器时长与所有定时器时长的最大公约数是相等的。如果对定时器误差有要求,则基准定时器时长可以由公式(5)得出:
基准定时器时长=最小定时器时长×平均误差(%)×4    (5)
通常,将时间较短的定时器作为环上的节点,将时间较长的定时器作为环延伸出的链表中的节点,环上的节点数目根据所有定时器中最大定时器时长以及基准定时器时长来设定,以此提高空间利用率和时间扩展性。
图5中,环上每个节点(RNode,Ring Node)是一个链表头,每个RNode对应稀疏矩阵的一行,且每个RNode中存储有行坐标i值,也称为环索引(RingIndex)。如果某个RNode的指针为空,则说明稀疏矩阵中此行的所有元素均为零,如果某个RNode的指针指向一个圈节点链表,则说明稀疏矩阵中此行存在非零元素值,且RNode指针所指向链表中的每个节点(LNode,Loop Node)分别表示稀疏矩阵中此行的第几列为非零元素,每个LNode中存储有列坐标j值,也称为圈索引(Loop Index),每个LNode又为定时器节点链表(TimerNodeList)头,定时器节点链表中的每个节点(TNode,Timer Node)对应一个定时器,每个TNode中存储一个特定的超时时间,该超时时间即为定时器时长。
本实施例中,在所有任务使用定时服务之前,需要先将定时器***实例化,向核心***或核心任务注册一个基准定时器,申请定时器***资源,并根据所有要用到的定时器建立环形链表。另外,还需要初始化定时器***状态信息、用户任务信息、统计信息等。这里,所述建立环形链表就是构造稀疏矩阵,环上RNode的个数就是行数,每个RNode对应一行,RNode中指针指向的链表上的每个LNode代表当前行中非零元素值对应的列。环指针从起始节点逐节点向前移动直到最后一个节点再返回起始节点为移动一圈,就相当于超时一圈,列值就等于超时的圈数,比如:第1列为超时1圈,表示环指针移动一圈;第2列为超时2圈,表示环指针移动两圈,以此类推。
从环上的起始节点开始,每次基准定时器超时的时候,环指针向前移动到下一个节点,并在当前RNode所指向的链表中查找是否有等于当前圈数的LNode存在,如果有LNode存在,则将相应的LNode从链表上取下,并对LNode指向的定时器链表中的每个节点做超时处理;如果没有LNode存在,则表明在该时间点上没有定时器超时,不需要做任何超时处理,那么,定时器***就等待下一次的基准定时器超时。由于LNode所构成的链表是按顺序排列的,所以只需判断链表中第一个LNode的值即可。
在定时器启动时,即需要添加定时器节点时,首先,根据TNode的超时时间计算出对应LNode的环索引和圈索引,即:计算出当前定时器在稀疏矩阵中的行、列坐标,计算公式如下:
环索引=(当前处理的环节点(Current Ring Index)+超时时间间隔)%环中元素个数
圈索引=(当前处理的环节点(Current Ring Index)+超时时间间隔)÷环中元素个数+当前处理的圈数
其中,%代表取模运算,所述超时时间间隔为当前定时器的超时时间除以基准定时器时长。
然后,在环索引对应的RNode指向的圈节点链表中查找相应的LNode,如果已经存在于链表中,则将TNode添加到该节点的定时器节点链表中;如果链表中不存在,则先添加对应的LNode,再添加到节点的TNodeLst中。
通过上述过程可以看出,本发明的定时器由软件形式实现,因此可通过软件的测试方法来对这类定时器进行调试,具有良好的可测试性和可维护性。并且,基于稀疏矩阵的定时器调度方式是线性和非线性互补的模式,使定时器***在空间效率和时间效率得到很好的平衡,并且具有很好的灵活性和扩展性。
由于超时处理以及其它操作会产生一定的时间开销,且用户或业务任务的优先级较低,所以间隔较长的定时器存在误差。基于此,本发明进一步提出一种优化方案,在时间间隔较长、定时精度要求较高的应用中,在定时器***中加入动态补偿机制,以弥补间隔较长的定时器存在的误差。所述动态补偿机制可以有多种实现方式,例如:除基准定时器之外,实例化定时器***时再向***额外注册一个时间较长的校准定时器,比如注册一个环长度整数倍的校准定时器。那么,当校准定时器触发时,可以根据实际处理状态和理想处理状态的差异进行调整,比如:比较实际处理节点数和理想处理节点数,根据比较结果对定时器***中定时器的位置做相应调整。其中,理想处理节点数可根据公式(6)计算得到:
理想处理节点数=校准定时器时长÷基准定时器时长  (6)
由于一般情况下,实际处理的节点数会小于理想处理节点数,且这个误差只会对时长较长的定时器有比较明显的影响。因此,这里所述的对定时器***中的定时器位置做相应调整是指:当校准定时器超时的时候,检查那些处于链表末端的、定时器时长大于校准定时器时长的定时器,将其提前(理想处理节点数-实际处理节点数)。
以上所述仅为本发明的较佳实施例而已,其目的在于说明本发明的基本实现原理,以帮助本领域技术人员理解本发明的实质,并非用于限定本发明的保护范围,凡是本领域技术人员按照本发明的技术特征所作的其它等效变换,均应包括在本发明专利申请的保护范围内。

Claims (10)

1、一种定时器调度方法,其特征在于,设置基准定时器和用于定时器管理的稀疏矩阵,将需使用的定时器根据定时器时长放置于稀疏矩阵的相应位置,未放置定时器的位置稀疏矩阵元素置为零;每次基准定时器超时时,判断稀疏矩阵中对应当前时刻的矩阵元素值是否为零,如果不为零,则对该元素下的所有定时器执行超时处理;如果为零,则等待下一次基准定时器超时。
2、根据权利要求1所述的方法,其特征在于,该方法进一步包括:在使用定时器之前,由定时器***创建定时器,并为所创建的定时器分配唯一的标识,初始化定时器控制块信息的存储空间。
3、根据权利要求2所述的方法,其特征在于,所述控制块信息包括定时器标识、定时器状态、类型、时长、用户定义类型和参数。
4、根据权利要求2所述的方法,其特征在于,该方法进一步包括:在使用定时器之前,设定所使用定时器的定时器时长。
5、根据权利要求4所述的方法,其特征在于,所述将定时器放置于稀疏矩阵的相应位置为:根据所使用定时器的定时器时长、基准定时器时长、稀疏矩阵的行数或列数计算所要放置定时器在稀疏矩阵中的行、列坐标;之后,将所使用的定时器放置于稀疏矩阵中计算出的行、列坐标对应的元素下。
6、根据权利要求5所述的方法,其特征在于,所述计算行、列坐标为:用所使用定时器的定时器时长与基准定时器时长之商除以稀疏矩阵的行数,将所得到的余数作为行坐标,所得到的商作为列坐标;或者,
用所使用定时器的定时器时长与基准定时器时长之商除以稀疏矩阵的列数,将所得到的商作为行坐标,所得到的余数作为列坐标。
7、根据权利要求4、5或6所述的方法,其特征在于,每次使用同一定时器时,设定的定时器时长不同。
8、根据权利要求1至6任一项所述的方法,其特征在于,所述稀疏矩阵由三元组表、带行表的三元组表、环形链表、十字链表实现。
9、根据权利要求1至6任一项所述的方法,其特征在于,该方法进一步包括:根据要使用定时器的定时器时长在稀疏矩阵中的相应位置添加要使用的定时器;或者,
根据要删除定时器的定时器时长从稀疏矩阵中的相应位置删除要删除的定时器,并确定该位置是否还存在定时器,在不存在定时器时,将该位置的元素值置为零;或者,
根据要使用的新定时器的定时器时长在稀疏矩阵中的相应位置添加要使用的定时器,根据原定时器的定时器时长从稀疏矩阵中的相应位置删除该定时器,并确定原定时器所在位置是否还存在定时器,在不存在定时器时,将该位置的元素值置为零。
10、根据权利要求1至6任一项所述的方法,其特征在于,该方法进一步包括:设置校准定时器,校准定时器触发时,根据实际处理状态和理想处理状态的差异调整稀疏矩阵中定时器的位置。
CNB2006101611652A 2006-12-11 2006-12-11 一种定时器调度方法 Expired - Fee Related CN100458706C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB2006101611652A CN100458706C (zh) 2006-12-11 2006-12-11 一种定时器调度方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB2006101611652A CN100458706C (zh) 2006-12-11 2006-12-11 一种定时器调度方法

Publications (2)

Publication Number Publication Date
CN1963766A true CN1963766A (zh) 2007-05-16
CN100458706C CN100458706C (zh) 2009-02-04

Family

ID=38082834

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2006101611652A Expired - Fee Related CN100458706C (zh) 2006-12-11 2006-12-11 一种定时器调度方法

Country Status (1)

Country Link
CN (1) CN100458706C (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104597820A (zh) * 2015-02-11 2015-05-06 四川天邑康和通信股份有限公司 一种扩展单片机硬件定时器的方法
CN107659305A (zh) * 2017-10-19 2018-02-02 郑州云海信息技术有限公司 一种基于cpld的时钟计数方法、装置及介质
CN109684056A (zh) * 2018-12-07 2019-04-26 咪咕文化科技有限公司 一种定时器实现方法及装置、调度器、存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS60140434A (ja) * 1983-12-27 1985-07-25 Nec Corp スケジユ−ラ・タイマ
CN100358295C (zh) * 2005-07-06 2007-12-26 华为技术有限公司 一种定时器调度方法

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104597820A (zh) * 2015-02-11 2015-05-06 四川天邑康和通信股份有限公司 一种扩展单片机硬件定时器的方法
CN107659305A (zh) * 2017-10-19 2018-02-02 郑州云海信息技术有限公司 一种基于cpld的时钟计数方法、装置及介质
CN109684056A (zh) * 2018-12-07 2019-04-26 咪咕文化科技有限公司 一种定时器实现方法及装置、调度器、存储介质
CN109684056B (zh) * 2018-12-07 2021-04-13 咪咕文化科技有限公司 一种定时器实现方法及装置、调度器、存储介质

Also Published As

Publication number Publication date
CN100458706C (zh) 2009-02-04

Similar Documents

Publication Publication Date Title
CN101719931B (zh) 一种基于多智能主体的层次式云端计算模型构建方法
US8516461B2 (en) Method to dynamically distribute a multi-dimensional work set across a multi-core system
US9141433B2 (en) Automated cloud workload management in a map-reduce environment
CN102387173B (zh) 一种MapReduce***及其调度任务的方法和装置
CN102567086B (zh) 一种任务调度的方法、设备和***
CN103309738B (zh) 用户作业调度方法及装置
CN104156264B (zh) 一种基于多gpu的基带信号处理任务并行实时调度方法
CN105786600B (zh) 任务调度方法和装置
CN104391918B (zh) 基于对等部署的分布式数据库查询优先级管理的实现方法
CN111861412B (zh) 面向完成时间优化的科学工作流调度方法及***
CN109478138A (zh) 具有隐式并发控制的高性能服务的编程模型和解释运行时环境
CN101288049A (zh) 数据处理装置中的数据引擎的使用
US10866832B2 (en) Workflow scheduling system, workflow scheduling method, and electronic apparatus
CN103729480A (zh) 一种多核实时操作***多个就绪任务快速查找及调度方法
CN104636202A (zh) 计算机***及其排程方法
CN103488531B (zh) 一种基于多核处理器和fpga的软硬件混合实时任务调度方法
CN102567096A (zh) 一种在多任务环境下防止死锁的互斥信号量管理方法
CN110472876A (zh) 一种任务调度方法、装置及计算机可读存储介质
CN103179570B (zh) 应用在分散式分时多工***的资源分配方法与***
CN108628665A (zh) 基于数据密集型科学工作流的任务调度与虚拟机整合方法
CN100458706C (zh) 一种定时器调度方法
CN105677467A (zh) 基于量化标签的Yarn资源调度器
ES2837458T3 (es) Método y sistema de procesamiento de datos para la modificación de bases de datos
Cho et al. T–L plane-based real-time scheduling for homogeneous multiprocessors
US7451132B2 (en) System and method for production planning utilizing on-line state-space planning

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
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20090204

Termination date: 20111211