利用内存开销提高计时器执行效率的方法

文档序号:6494158阅读:173来源:国知局
利用内存开销提高计时器执行效率的方法
【专利摘要】本发明涉及利用内存开销提高计时器执行效率的方法,步骤为:1)创建规模为N的数组,每个数组成员挂载由计时器节点组成的链表,同时维护当前的计时器索引变量V;2)当有计时器需注册时,根据该注册计时器节点的超时时间T与当前计时器索引变量V计算出数组下标I,根据这个下标将需要注册的计时器节点插入到对应数组成员挂载的链表中;3)每次晶振芯片产生中断时,对变量V执行加一并对N取模的操作,用该操作结果更新变量V;4)每次收到晶振芯片产生的中断时,执行对计时器索引变量V的维护,之后将V作为数组下标,该下标对应的数组成员挂载的链表中的每个节点都是超时节点,删除这些计时器节点,并通知注册该计时器节点的任务。本发明以增加适当内存开销的手段,来换取更高的计时器实现效率。
【专利说明】利用内存开销提高计时器执行效率的方法
【技术领域】
[0001]本发明涉及利用内存开销提高计时器执行效率的方法。
【背景技术】
[0002]传统的计时器实现算法,通常是由计时器模块维护一个单一的动态计时器链表,该链表由所有已注册的计时器节点组成,每个节点保存该计时器的剩余时间单位,利用设备的晶振芯片作为固定时钟源,该时钟源每隔一个时间单位触发一个系统中断,在对应的中断处理函数中,需要遍历该计时器链表中的每一个节点,遍历操作是对每个节点的剩余时间单位执行减一操作,减一之后如果该节点的剩余时间单位为零,表明计时器时间已到,则删除该节点,并调用相关的回调函数或者发送消息,以通知注册该计时器节点的任务/模块。
[0003]由上述可知,处理计时器链表的时间开销,随着链表中节点数目的增加呈线性增长。当计时器链表规模不大时,遍历链表每一个节点以及对节点的操作,本身的时间开销是比较小的。但是在大中型的设备中,可能会注册成百上千甚至更多的计时器节点,从而使得计时器链表规模很大,导致处理计时器链表的开销可能成为设备执行效率的负担。
[0004]而目前的嵌入式系统中,内存不再是个问题,这使得通过内存开销来提高计时器实现效率成为可能。

【发明内容】

[0005]有鉴于此,本发明的目的是提供一种利用内存开销提高计时器执行效率的方法,该方法通过增加适当的内存开销,在实现计时器功能的同时,可以不用遍历每个计时器节点,使计时器模块本身的时间开销相对稳定,而与计时器链表规模的关系不大,最终达到提升计时器实现效率的目的,尤其是计时器链表规模很大时。
[0006]为实现上述目的,本发明采用的技术方案如下:
[0007]—种利用内存开销提高计时器执行效率的方法,其包括以下步骤:
[0008]I)初始化步骤:创建一个数组,数组规模为N,每个数组成员挂载一个由计时器节点组成的链表,该链表初始为空链表,同时维护一个当前的计时器索引变量V,该变量V的初始值为零;
[0009]2)计时器注册步骤:当有计时器需要注册时,根据该注册计时器节点的超时时间T与当前计时器索引变量V,计算出一个数组下标I,然后根据这个下标,将需要注册的计时器节点插入到对应数组成员挂载的链表中;
[0010]3)维护当前计时器索引变量V步骤:每次晶振芯片产生中断时,对变量V执行加一并对N取模的操作,用该操作结果更新变量V ;
[0011]4)计时器节点超时的判断和处理步骤:每次收到晶振芯片产生的中断时,首先执行对计时器索引变量V的维护,之后将V作为数组下标,该下标对应的数组成员挂载的链表中的每个节点都是超时节点,对该链表进行遍历,遍历操作是删除计时器节点,并通知注册该计时器节点的任务。
[0012]所述步骤2)中,计算数组下标的方法是将计时器节点的超时时间T与当前计时器索引变量V两者相加,然后再对N取模。
[0013]本发明可带来如下效果:在数组规模合适的情况下,注册的计时器节点数目越多,这种执行效率的提升越明显。所以本方法尤其适用于设备正常负荷运行时,计时器节点规模较大的情况。
[0014]经验证,假定一台设备正常负荷运行时,注册的计时器节点稳定在大约1000个,所使用的数组规模为100,那么计时器模块处理的执行效率大约可以提高5倍以上(具体数值因设备的主处理芯片性能而异)。
【专利附图】

【附图说明】
[0015]图1是注册计时器节点的处理流程示意图;
[0016]图2是每次中断触发的处理流程示意图。
[0017]图中做如下假定:数组规模为N,当前计时器索引变量为V,注册计时器节点的超时时间为T,节点需要插入的链表对应的数组下标为I。
【具体实施方式】
[0018]本发明涉及一种利用内存开销提高计时器执行效率的方法,其包括以下步骤:
[0019]I)初始化步骤:创建一个数组,数组规模为N,每个数组成员挂载一个由计时器节点组成的链表,该链表初始为空链表,同时维护一个当前的计时器索引变量V,该变量V的初始值为零;
[0020]2)计时器注册步骤:当有计时器需要注册时,根据该注册计时器节点的超时时间T与当前计时器索引变量V,计算出一个数组下标I,然后根据这个下标,将需要注册的计时器节点插入到对应数组成员挂载的链表中;
[0021]3)维护当前计时器索引变量V步骤:每次晶振芯片产生中断时,对变量V执行加一并对N取模的操作,用该操作结果更新变量V ;
[0022]4)计时器节点超时的判断和处理步骤:每次收到晶振芯片产生的中断时,首先执行对计时器索引变量V的维护,之后将V作为数组下标,该下标对应的数组成员挂载的链表中的每个节点都是超时节点,对该链表进行遍历,遍历操作是删除计时器节点,并通知注册该计时器节点的任务。
[0023]所述步骤2)中,计算数组下标的方法是将计时器节点的超时时间T与当前计时器索引变量V两者相加,然后再对N取模。
[0024]下面结合附图详细说明。
[0025]请参阅图1、图2。对本发明方法描述如下:
[0026]初始化:预先创建一个数组,该数组也就是需要增加的内存开销,其规模视系统的具体情况而定,假定数组规模为恒量N (下同),每个数组成员挂载一个由计时器节点组成的链表,该链表初始为空链表。同时维护一个当前的计时器索引变量,假定该变量为V (下同),该变量V的初始值为零,取值范围为[(Tn)区间的整数值。
[0027]计时器注册:当有计时器需要注册时,根据该计时器节点的剩余时间单位与当前计时器索引变量V,计算出一个数组下标,计算方法是两者相加然后对N取模,然后根据这个下标,将需要注册的计时器节点插入到对应数组成员挂载的链表中。
[0028]当前计时器索引变量V的维护:每次晶振芯片产生中断时,对变量V执行加一并对N取模的操作,用该操作结果更新变量V。
[0029]计时器节点超时的判断和处理:每次收到晶振芯片产生的中断时,首先执行对计时器索引变量V的维护,之后将V作为数组下标,该下标对应的数组成员挂载的链表中的每个节点都是超时节点,对该链表进行遍历,遍历操作是删除计时器节点,并通知注册该计时器节点的任务/模块。
[0030]本发明使用二维链表代替一维链表,通过算法的改变,减少链表节点访问次数,也就是利用内存空间复杂度换取执行时间效率。该方法与传统方法相比,主要区别如下,由此可以看出该方法在执行效率的优势。
[0031]每次晶振芯片产生中断时,不需要对所有计时器节点进行遍历,仅需对所有节点的大约1/N进行遍历,并且遍历操作不再有算术运算和比较运算。
[0032]需要增加一定的内存开销,大约为数组规模NX4个字节。
[0033]注册计时器时,为了将节点插入到正确的链表,需要做算术预处理操作,以及,每次中断时,需要对计时器索引变量V做算术操作。相对于每次中断的遍历大量计时器节点的操作,这两个算术操作的时间开销基本是可以忽略的。
[0034]实施范例
[0035]通过设定,每隔Ims产生一个中断,数组规模N为1000,当前计时器索引变量V为500,需要注册的计时器超时时间T为600ms,以此为例,描述该计时器从注册到超时的处理过程。
[0036]1.计时器的注册,首先计算出正确的数组下标I, 1=500+600=1100,I=I 100-1000=100。100就是数组下标,将该节点插入到100对应的数组成员挂载的链表中,
注册完成。
[0037]2.此后,每次中断,都会导致V的值增加1,并且遍历V值对应的链表,到500次中断,即经过500ms之后,V值变为0,再经过100次中断,即IOOms之后,V值变为100 (在此之前,都不会遍历到该节点),下标100对应的链表中的所有节点都为超时节点,也包括该节点,也就是从注册开始,经过600ms之后,能遍历到该节点。删除该节点,并通知注册该节点的任务/模块,该节点处理完成。
[0038]注:如上示例中,数组规模为1000,每个中断间隔为1ms,所以,该数组能实现最大超时时间为IOOOms的计时器,即这是个毫秒级的计时器,如果因为系统的需要,需要实现超过IOOOms的计时器,那么再增加一个秒级计时器的数组即可,原理方法是完全相同的,具体实现时,先挂载到秒级计时器数组,超时后,再根据计时器节点剩余的毫秒数将计时器节点插入到毫秒级计时器数组中,直到超时。
【权利要求】
1.一种利用内存开销提高计时器执行效率的方法,其特征在于包括以下步骤: 1)初始化步骤:创建一个数组,数组规模为N,每个数组成员挂载一个由计时器节点组成的链表,该链表初始为空链表,同时维护一个当前的计时器索引变量V,该变量V的初始值为零; 2)计时器注册步骤:当有计时器需要注册时,根据该注册计时器节点的超时时间T与当前计时器索引变量V,计算出一个数组下标I,然后根据这个下标,将需要注册的计时器节点插入到对应数组成员挂载的链表中; 3)维护当前计时器索引变量V步骤:每次晶振芯片产生中断时,对变量V执行加一并对N取模的操作,用该操作结果更新变量V ; 4)计时器节点超时的判断和处理步骤:每次收到晶振芯片产生的中断时,首先执行对计时器索引变量V的维护,之后将V作为数组下标,该下标对应的数组成员挂载的链表中的每个节点都是超时节点,对该链表进行遍历,遍历操作是删除计时器节点,并通知注册该计时器节点的任务。
2.如权利要求1所述的利用内存开销提高计时器执行效率的方法,其特征在于: 所述步骤2)中,计算数组下标的方法是将计时器节点的超时时间T与当前计时器索引变量V两者相加,然后再对N取模。
【文档编号】G06F1/04GK103901941SQ201210586981
【公开日】2014年7月2日 申请日期:2012年12月28日 优先权日:2012年12月28日
【发明者】侯玉成, 樊劲松, 王志刚 申请人:北京大唐高鸿软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1