软件设计中基于海量定时器的管理方法及系统的制作方法

文档序号:7812713阅读:279来源:国知局
软件设计中基于海量定时器的管理方法及系统的制作方法
【专利摘要】本发明公开了一种软件设计中基于海量定时器的管理方法及系统,涉及网络通信领域,该系统采用时间轮子加有序链表的方式对海量定时器进行管理:管理未到时定时器时,根据离散算法将定时器的溢出时间转化为适合时间轮子的数值,找到时间轮子上的定时器有序链表,再将该定时器插入到这个有序链表的合适位置中;调度到时定时器时,根据离散算法将当前系统时间转换为适合时间轮子的数值,找到时间轮子上面的定时器有序链表,再执行该有序链表上的所有到期定时器。本发明能实现软件设计中海量定时器的快速管理,避免由定时调度慢导致的各种错误;到达49天时,能根据32位数据类型的最高位来控制是否发生翻转并重置,使定时器得到及时调度。
【专利说明】软件设计中基于海量定时器的管理方法及系统

【技术领域】
[0001]本发明涉及网络通信领域,具体是涉及一种软件设计中基于海量定时器的管理方法及系统。

【背景技术】
[0002]在软件功能越来越复杂的条件下,软件定时器广泛应用于软件设计中,一般条件下定时器设计成有序链表,在有新的定时器到来时,将这个定时器插入到链表的合适位置,在插入定时器的时候,遍历这个有序链表会耗费很多时间,影响性能,尤其在大量使用定时器、且频繁使用时,管理这些定时器将耗费大量时间,导致心跳报文发送不及时、链路断链等由定时调度慢导致的各种错误。当计时精度为毫秒级别时,软件编译器仅仅支持32位数据类型,利用32位数据类型作为计时变量,到达49天时,该变量计满溢出,定时器的数值翻转,使得计数变小,导致该定时器得不到调度。


【发明内容】

[0003]本发明的目的是为了克服上述【背景技术】的不足,提供一种软件设计中基于海量定时器的管理方法及系统,能够实现软件设计中海量定时器的快速管理,避免心跳报文发送不及时、路由的邻居关系断链等由定时调度慢导致的各种错误;到达49天时,能够根据32位数据类型的最高位来控制是否发生翻转并重置,使定时器得到及时调度。
[0004]本发明提供一种软件设计中基于海量定时器的管理方法,包括以下步骤:
[0005]A、定义一个时间轮子,自行选定一种离散算法,将时间点或时间片均匀分配在该时间轮子上,属于某个时间点或时间片的定时器使用有序链表方式挂在该时间轮子下;所述时间轮子和有序链表的关系以及时间轮子的运作方式如下:根据现有的离散算法或者是直接对时间进行取模运算,在时间轮子上离散各个时间点,在得到的离散时间点处挂一个有序链表,用于存储位于该时间点上的定时器,将海量的定时器通过一个有序链表离散开来,便于调度定时器;
[0006]B、定时器的计时单位为毫秒,定时器的溢出时间使用无符号32位数据类型,系统时间使用有符号的32位数据类型;插入定时器和调度定时器是在同一进程中同时进行对同一时间轮子同时进行的操作,在插入定时器或调度定时器的时候,给时间轮子上锁,以保证数据的可靠;
[0007]插入定时器的实现流程如下:
[0008]步骤101、根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子;
[0009]步骤102、进入插入定时器的流程,根据定时器的溢出时间计算出时间轮子上的位置;
[0010]步骤103、根据定时器的溢出时间找到位于时间轮子上的链表位置,并将定时器插入到该位置下挂有序链表的合适位置;
[0011]调度定时器的实现流程如下:
[0012]步骤201、根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子;
[0013]步骤202、进入调度定时器的流程;
[0014]步骤203、读取系统的当前时间,根据离散算法将系统的当前时间转换为系统时间的滴答;
[0015]在第25天的时候,即当定时器的溢出时间的符号位为I时,将未调度的所有定时器的溢出时间进行以下转换:根据定时器的溢出时间的高位来判断是否发生翻转,如果定时器的溢出时间的高位为1,则将定时器的溢出时间的高位置为0,即将定时器的溢出时间与数据0x7fffffff做位与运算;如果定时器的溢出时间的高位为0,则将定时器的溢出时间赋值为0,保证该定时器被及时调度;
[0016]步骤204、读取时间轮子上记录的滴答,比较系统时间的滴答与时间轮子上记录的滴答是否相等,如果不相等,则转到步骤205 ;如果相等,则返回到步骤201 ;
[0017]步骤205、顺序执行位于该时间轮子上面的有序链表的溢出定时器的处理流程,转到步骤206 ;
[0018]步骤206、将执行过的定时器从有序链表删除,转到步骤207 ;
[0019]步骤207、执行后将时间轮子记录的滴答递增,返回到步骤204。
[0020]本发明还提供一种软件设计中基于海量定时器的管理系统,该系统通过软件实现,采用时间轮子加有序链表的方式对海量定时器进行管理,该系统包括时间轮子定义单元、时间轮子上锁单元、定时器插入单元、定时器调度单元,其中:
[0021]所述时间轮子定义单元用于:定义一个时间轮子,自行选定一种离散算法,将时间点或时间片均匀分配在该时间轮子上,属于某个时间点或时间片的定时器使用有序链表方式挂在该时间轮子下;所述时间轮子和有序链表的关系以及时间轮子的运作方式如下:根据现有的离散算法或者是直接对时间进行取模运算,在时间轮子上离散各个时间点,在得到的离散时间点处挂一个有序链表,用于存储位于该时间点上的定时器,将海量的定时器通过一个有序链表离散开来,便于调度定时器;定时器的计时单位为毫秒,定时器的溢出时间使用无符号32位数据类型,系统时间使用有符号的32位数据类型;
[0022]所述时间轮子上锁单元用于:插入定时器和调度定时器是在同一进程中同时进行对同一时间轮子同时进行的操作,在插入定时器或调度定时器的时候,给时间轮子上锁,以保证数据的可靠;
[0023]所述定时器插入单元用于:根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子;进入插入定时器的流程,根据定时器的溢出时间计算出时间轮子上的位置;根据定时器的溢出时间找到位于时间轮子上的链表位置,并将定时器插入到该位置下挂有序链表的合适位置;
[0024]所述定时器调度单元用于执行以下流程:
[0025]步骤201、根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子;
[0026]步骤202、进入调度定时器的流程;
[0027]步骤203、读取系统的当前时间,根据离散算法将系统的当前时间转换为系统时间的滴答;
[0028]在第25天的时候,即当定时器的溢出时间的符号位为I时,将未调度的所有定时器的溢出时间进行以下转换:根据定时器的溢出时间的高位来判断是否发生翻转,如果定时器的溢出时间的高位为1,则将定时器的溢出时间的高位置为0,即将定时器的溢出时间与数据0x7fffffff做位与运算;如果定时器的溢出时间的高位为0,则将定时器的溢出时间赋值为0,保证该定时器被及时调度;
[0029]步骤204、读取时间轮子上记录的滴答,比较系统时间的滴答与时间轮子上记录的滴答是否相等,如果不相等,则转到步骤205 ;如果相等,则返回到步骤201 ;
[0030]步骤205、顺序执行位于该时间轮子上面的有序链表的溢出定时器的处理流程,转到步骤206 ;
[0031]步骤206、将执行过的定时器从有序链表删除,转到步骤207 ;
[0032]步骤207、执行后将时间轮子记录的滴答递增,返回到步骤204。
[0033]与现有技术相比,本发明的优点如下:
[0034](I)本发明采用时间轮子加有序链表的方式对海量定时器进行管理,能够实现软件设计中海量定时器的快速管理,避免心跳报文发送不及时、路由的邻居关系断链等由定时调度慢导致的各种错误。
[0035](2)本发明利用32位数据类型作为计时变量,并且计时精度为毫秒,到达49天时,能够根据32位数据类型的最高位来控制是否发生翻转并重置,使定时器得到及时调度。

【专利附图】

【附图说明】
[0036]图1是本发明实施例中时间轮子和有序链表的关系不意图。
[0037]图2是本发明实施例中基于海量定时器的管理方法的流程图。
图3是本发明实施例中基于调度定时器的管理方法的流程图。

【具体实施方式】
[0038]下面结合附图及具体实施例对本发明作进一步的详细描述。
[0039]本发明实施例提供一种软件设计中基于海量定时器的管理方法,包括以下步骤:
[0040]A、参见图1所示,首先根据需要定义一个适合大小的时间轮子,自行选定一种离散算法(下文中统一使用该离散算法),将时间点或时间片均匀分配在该时间轮子上,属于某个时间点或时间片的定时器使用有序链表方式挂在该时间轮子下。
[0041]时间轮子和有序链表的关系以及时间轮子的运作方式如下:可以根据现有的离散算法或者是直接对时间进行取模运算,在时间轮子上离散各个时间点,在得到的离散时间点处挂一个有序链表,用于存储位于该时间点上的定时器,这样就将海量的定时器通过一个有序链表离散开来,便于调度定时器,提高效率。
[0042]B、定时器的计时单位为毫秒,定时器的溢出时间使用无符号32位数据类型,系统时间使用有符号的32位数据类型,所以系统时间只能记录到24天,而定时器的溢出时间可以记录到49天。
[0043]插入定时器和调度定时器是在同一进程中对同一时间轮子同时进行的操作,在插入定时器的同时也可以调度定时器,相反在调度定时器的同时也可以插入定时器,所以,在插入定时器或调度定时器的时候,需要给时间轮子上锁,以保证数据的可靠。
[0044]参见图2所示,插入定时器的实现流程如下:
[0045]步骤101、根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子;
[0046]步骤102、进入插入定时器的流程,根据定时器的溢出时间计算出时间轮子上的位置;
[0047]步骤103、根据定时器的溢出时间找到位于时间轮子上的链表位置,并将定时器插入到该位置下挂有序链表的合适位置。
[0048]参见图3所示,调度定时器的实现流程如下:
[0049]步骤201、根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子;
[0050]步骤202、进入调度定时器的流程;
[0051]步骤203、读取系统的当前时间,根据离散算法将系统的当前时间转换为系统时间的滴答;为了保证定时器到期可以正常调度,在第25天的时候,即当定时器的溢出时间的符号位为I时,将未调度的所有定时器的溢出时间进行以下转换:根据定时器的溢出时间的高位来判断是否发生翻转,如果定时器的溢出时间的高位为1,则将定时器的溢出时间的高位置为0,即将定时器的溢出时间与数据0x7fffffff做位与运算;如果定时器的溢出时间的高位为0,则将定时器的溢出时间赋值为0,保证该定时器可以被及时调度。由于定时器的溢出时间总会比系统当前时间要大,这样做能够防止溢出时间溢出、但系统时间没有溢出而导致定时器提前执行的特殊情况;
[0052]步骤204、读取时间轮子上记录的滴答,比较系统时间的滴答与时间轮子上记录的滴答是否相等,如果不相等,则转到步骤205 ;如果相等,则返回到步骤201 ;
[0053]步骤205、顺序执行位于该时间轮子上面的有序链表的溢出定时器的处理流程,转到步骤206 ;
[0054]步骤206、将执行过的定时器从有序链表删除,转到步骤207 ;
[0055]步骤207、执行后将时间轮子记录的滴答递增,返回到步骤204。
[0056]本发明实施例还提供一种软件设计中基于海量定时器的管理系统,该系统通过软件实现,采用时间轮子加有序链表的方式对海量定时器进行管理,该系统包括时间轮子定义单元、时间轮子上锁单元、定时器插入单元、定时器调度单元。
[0057]时间轮子定义单元用于:定义一个时间轮子,自行选定一种离散算法,将时间点或时间片均勻分配在该时间轮子上,属于某个时间点或时间片的定时器使用有序链表方式挂在该时间轮子下;所述时间轮子和有序链表的关系以及时间轮子的运作方式如下:根据现有的离散算法或者是直接对时间进行取模运算,在时间轮子上离散各个时间点,在得到的离散时间点处挂一个有序链表,用于存储位于该时间点上的定时器,将海量的定时器通过一个有序链表离散开来,便于调度定时器;定时器的计时单位为毫秒,定时器的溢出时间使用无符号32位数据类型,系统时间使用有符号的32位数据类型。
[0058]时间轮子上锁单元用于:插入定时器和调度定时器是在同一进程中同时进行对同一时间轮子同时进行的操作,在插入定时器或调度定时器的时候,给时间轮子上锁,以保证数据的可靠。
[0059]定时器插入单元用于:根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子;进入插入定时器的流程,根据定时器的溢出时间计算出时间轮子上的位置;根据定时器的溢出时间找到位于时间轮子上的链表位置,并将定时器插入到该位置下挂有序链表的合适位置。
[0060]定时器调度单元用于执行以下流程:
[0061]步骤201、根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子;
[0062]步骤202、进入调度定时器的流程;
[0063]步骤203、读取系统的当前时间,根据离散算法将系统的当前时间转换为系统时间的滴答;
[0064]在第25天的时候,即当定时器的溢出时间的符号位为I时,将未调度的所有定时器的溢出时间进行以下转换:根据定时器的溢出时间的高位来判断是否发生翻转,如果定时器的溢出时间的高位为1,则将定时器的溢出时间的高位置为0,即将定时器的溢出时间与数据0x7fffffff做位与运算;如果定时器的溢出时间的高位为0,则将定时器的溢出时间赋值为0,保证该定时器被及时调度;
[0065]步骤204、读取时间轮子上记录的滴答,比较系统时间的滴答与时间轮子上记录的滴答是否相等,如果不相等,则转到步骤205 ;如果相等,则返回到步骤201 ;
[0066]步骤205、顺序执行位于该时间轮子上面的有序链表的溢出定时器的处理流程,转到步骤206 ;
[0067]步骤206、将执行过的定时器从有序链表删除,转到步骤207 ;
[0068]步骤207、执行后将时间轮子记录的滴答递增,返回到步骤204。
[0069]本发明的原理详细阐述如下:
[0070]本发明中基于海量定时器的管理系统通过软件实现,采用时间轮子加有序链表的方式对海量定时器进行管理。定时器的管理包括同时进行的两个部分,一是对未到时定时器的管理,一是对到期定时器的调度。管理未到时定时器时,根据离散算法,将定时器的溢出时间转化为适合时间轮子的数值即系统时间的滴答,根据该系统时间的滴答找到时间轮子上的定时器有序链表,再根据定时器的溢出时间将该定时器插入到这个有序链表的合适位置中。调度到时定时器时,根据离散算法将当前系统时间转换为适合时间轮子的数值即系统时间的滴答,根据该系统时间的滴答找到时间轮子上面的定时器有序链表,再执行该有序链表上的所有到期定时器的处理流程。
[0071 ] 本领域的技术人员可以对本发明实施例进行各种修改和变型,倘若这些修改和变型在本发明权利要求及其等同技术的范围之内,则这些修改和变型也在本发明的保护范围之内。
[0072]说明书中未详细描述的内容为本领域技术人员公知的现有技术。
【权利要求】
1.一种软件设计中基于海量定时器的管理方法,其特征在于,包括以下步骤: A、定义一个时间轮子,自行选定一种离散算法,将时间点或时间片均匀分配在该时间轮子上,属于某个时间点或时间片的定时器使用有序链表方式挂在该时间轮子下;所述时间轮子和有序链表的关系以及时间轮子的运作方式如下:根据现有的离散算法或者是直接对时间进行取模运算,在时间轮子上离散各个时间点,在得到的离散时间点处挂一个有序链表,用于存储位于该时间点上的定时器,将海量的定时器通过一个有序链表离散开来,便于调度定时器; B、定时器的计时单位为毫秒,定时器的溢出时间使用无符号32位数据类型,系统时间使用有符号的32位数据类型;插入定时器和调度定时器是在同一进程中同时进行对同一时间轮子同时进行的操作,在插入定时器或调度定时器的时候,给时间轮子上锁,以保证数据的可靠; 插入定时器的实现流程如下: 步骤101、根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子; 步骤102、进入插入定时器的流程,根据定时器的溢出时间计算出时间轮子上的位置;步骤103、根据定时器的溢出时间找到位于时间轮子上的链表位置,并将定时器插入到该位置下挂有序链表的合适位置; 调度定时器的实现流程如下: 步骤201、根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子; 步骤202、进入调度定时器的流程; 步骤203、读取系统的当前时间,根据离散算法将系统的当前时间转换为系统时间的滴答; 在第25天的时候,即当定时器的溢出时间的符号位为I时,将未调度的所有定时器的溢出时间进行以下转换:根据定时器的溢出时间的高位来判断是否发生翻转,如果定时器的溢出时间的高位为1,则将定时器的溢出时间的高位置为0,即将定时器的溢出时间与数据0x7fffffff做位与运算;如果定时器的溢出时间的高位为0,则将定时器的溢出时间赋值为0,保证该定时器被及时调度; 步骤204、读取时间轮子上记录的滴答,比较系统时间的滴答与时间轮子上记录的滴答是否相等,如果不相等,则转到步骤205 ;如果相等,则返回到步骤201 ; 步骤205、顺序执行位于该时间轮子上面的有序链表的溢出定时器的处理流程,转到步骤 206 ; 步骤206、将执行过的定时器从有序链表删除,转到步骤207 ; 步骤207、执行后将时间轮子记录的滴答递增,返回到步骤204。
2.一种软件设计中基于海量定时器的管理系统,其特征在于:该系统通过软件实现,采用时间轮子加有序链表的方式对海量定时器进行管理,该系统包括时间轮子定义单元、时间轮子上锁单元、定时器插入单元、定时器调度单元,其中: 所述时间轮子定义单元用于:定义一个时间轮子,自行选定一种离散算法,将时间点或时间片均勻分配在该时间轮子上,属于某个时间点或时间片的定时器使用有序链表方式挂在该时间轮子下;所述时间轮子和有序链表的关系以及时间轮子的运作方式如下:根据现有的离散算法或者是直接对时间进行取模运算,在时间轮子上离散各个时间点,在得到的离散时间点处挂一个有序链表,用于存储位于该时间点上的定时器,将海量的定时器通过一个有序链表离散开来,便于调度定时器;定时器的计时单位为毫秒,定时器的溢出时间使用无符号32位数据类型,系统时间使用有符号的32位数据类型; 所述时间轮子上锁单元用于:插入定时器和调度定时器是在同一进程中同时进行对同一时间轮子同时进行的操作,在插入定时器或调度定时器的时候,给时间轮子上锁,以保证数据的可靠; 所述定时器插入单元用于:根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子;进入插入定时器的流程,根据定时器的溢出时间计算出时间轮子上的位置;根据定时器的溢出时间找到位于时间轮子上的链表位置,并将定时器插入到该位置下挂有序链表的合适位置; 所述定时器调度单元用于执行以下流程: 步骤201、根据时间轮子和有序链表的关系,分配定时器使用的时间轮子的大小,并初始化定时器使用的时间轮子; 步骤202、进入调度定时器的流程; 步骤203、读取系统的当前时间,根据离散算法将系统的当前时间转换为系统时间的滴答; 在第25天的时候,即当定时器的溢出时间的符号位为I时,将未调度的所有定时器的溢出时间进行以下转换:根据定时器的溢出时间的高位来判断是否发生翻转,如果定时器的溢出时间的高位为1,则将定时器的溢出时间的高位置为0,即将定时器的溢出时间与数据0x7fffffff做位与运算;如果定时器的溢出时间的高位为0,则将定时器的溢出时间赋值为0,保证该定时器被及时调度; 步骤204、读取时间轮子上记录的滴答,比较系统时间的滴答与时间轮子上记录的滴答是否相等,如果不相等,则转到步骤205 ;如果相等,则返回到步骤201 ; 步骤205、顺序执行位于该时间轮子上面的有序链表的溢出定时器的处理流程,转到步骤 206 ; 步骤206、将执行过的定时器从有序链表删除,转到步骤207 ; 步骤207、执行后将时间轮子记录的滴答递增,返回到步骤204。
【文档编号】H04L12/24GK104301134SQ201410429177
【公开日】2015年1月21日 申请日期:2014年8月27日 优先权日:2014年8月27日
【发明者】付华楷, 杨士杰 申请人:烽火通信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1