CN103106222B - 定时器的处理方法及装置 - Google Patents

定时器的处理方法及装置 Download PDF

Info

Publication number
CN103106222B
CN103106222B CN201110362316.1A CN201110362316A CN103106222B CN 103106222 B CN103106222 B CN 103106222B CN 201110362316 A CN201110362316 A CN 201110362316A CN 103106222 B CN103106222 B CN 103106222B
Authority
CN
China
Prior art keywords
chained list
timer event
time
cryptographic hash
event
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
CN201110362316.1A
Other languages
English (en)
Other versions
CN103106222A (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201110362316.1A priority Critical patent/CN103106222B/zh
Publication of CN103106222A publication Critical patent/CN103106222A/zh
Application granted granted Critical
Publication of CN103106222B publication Critical patent/CN103106222B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Computer And Data Communications (AREA)

Abstract

本申请公开了一种定时器的处理方法及装置,其中,该定时器的处理方法包括:将定时器事件的触发时间划分成多个时间段,其中,每一个所述时间段对应于一个哈希值;将触发时间在同一个时间段上的定时器事件插入到同一个链表中;以及将各个所述链表中的定时器事件映射到哈希表中,其中,每一个定时器事件在哈希表中对应地存储有一个哈希值以及该定时器事件所在的链表的标识。本申请解决了现有技术中定时器的处理方式系统开销比较大的问题,实现了减小处理定时器事件的系统开销的技术效果。

Description

定时器的处理方法及装置
技术领域
本申请涉及数据处理领域,具体而言,涉及一种定时器的处理方法及装置。
背景技术
随着互联网技术的发展,海量元素定时器得到越来越多的应用。这里,首先描述一下关于海量元素定时器的几个基本概念:1)定时器是指在指定的时间点或者指定的时间范围内触发预先设定好的事件的硬件或者软件的具体实现;定时器事件是指,需要在某个时间点或者时间范围内,做某件事情的一个数据结构实体;海量元素是指大量的需要触发的事件,例如百万以上的级别;海量元素定时器是指,在指定的时间点或者指定的时间范围内触发预先设定好的海量元素的硬件或者软件的具体实现。
在现有技术中,从操作系统底层到应用层,有很多种方法实现海量元素定时器。但是,这些方法只适合于数据量不大,时间范围比较连续的情况,对于海量元素且时间分布离散的定时器,现有技术中缺少比较好的实现方法。例如,在现有技术中存在无序链表、有序链表和时间轮等几种方案,以下分别介绍。
1)无序链表方案:按照创建顺序,把事件元素用链表连接起来,不停遍历链表,查找到达发生时间点的事件元素并处理。在该种实现方式中,由于在链表中事件是无序排列,所以要判断哪些事件到了触发点,必须要遍历所有元素,假设当前有500万个事件元素在链表中,从定时器事件的触发时间到达至执行该定时器事件的时间要求不超过1秒(即,定时器事件精确度要求为1秒),那么遍历将会导致CPU处理负荷飙升,大幅增加系统负载。
2)有序链表方案:按照事件的发生时间顺序,把事件元素用一个有序的链表连接起来,查找到达发生时间点的事件元素并处理。该方案是对无序链表实现的改进。然而,该种实现方式虽然对链表做到了有序排列,降低了查找开销,但是对于插入元素却带来了额外的开销,因为每次插入需要先查找在有序链表中的插入点,随着元素的增多这个开销会增大,影响处理效率。
3)时间轮方案:把时间按照一定的间隔划分,并预先为每个时间段划分好存储空间,把事件元素按照发生时间分别存储到对应时间段的存储空间,当到达某个时间轮范围时,取出这一个轮所包含的所有事件元素。该时间轮的实现方式对于时间范围分布比较均匀的事件元素比较合适,但对于时间分布很离散的事件元素则不适合,因为时间轮的实现,需要分配连续的空间,而如果是离散的时间分布,则此种方式会大量浪费内存资源。
因此,针对相关技术中定时器的处理方式系统开销比较大的问题,目前尚未提出有效的解决方案。
发明内容
针对现有技术中定时器的处理方式系统开销比较大的问题,本申请的主要目的在于提供一种定时器的处理方法及装置,以解决上述问题。
为了实现上述目的,根据本申请的一个方面,提供一种定时器的处理方法,其包括:将定时器事件的触发时间划分成多个时间段,其中,每一个所述时间段对应于一个哈希值;将触发时间在同一个时间段上的定时器事件插入到同一个链表中;以及将各个所述链表中的定时器事件映射到哈希表中,其中,每一个定时器事件在哈希表中对应地存储有一个哈希值以及该定时器事件所在的链表的标识。
优选地,所述将各个所述链表中的定时器事件映射到哈希表中之后,所述定时器的处理方法还包括:获取当前时间段所对应的当前哈希值;在所述哈希表中查找与所述当前哈希值对应的链表的标识;执行查找到的链表的标识指示的链表中的定时器事件。
优选地,所述执行查找到的链表的标识指示的链表中的定时器事件的步骤包括:创建任务队列;将查找到的链表中的定时器事件加入所述任务队列中;执行所述任务队列中的定时器事件。
优选地,所述将查找到的链表中的定时器事件加入所述任务队列中的步骤包括:创建调度线程;所述调度线程判断是否存在所述查找到的链表中的定时器事件;在判断出存在所述查找到的链表中的定时器事件时,所述唤醒的调度线程将查找到的链表中的定时器事件加入所述任务队列中。
优选地,所述执行任务队列中的定时器事件的步骤包括:任务线程执行任务队列中的定时器事件。
优选地,所述将触发时间在同一个时间段上的定时器事件插入到同一个链表中的步骤具体包括:判断待处理的定时器事件的触发时间所处的时间段;获取所述触发时间所处的时间段对应的哈希值;查找与所获取到的哈希值对应的链表;将所述待处理的定时器事件插入到所查找到的链表中。
优选地,所述查找与所获取到的哈希值对应的链表的步骤包括:在查找不到与所获取到的哈希值对应的链表时,创建与所获取到的哈希值对应的链表,并将所创建的链表作为所述查找到的链表。
优选地,所述将触发时间在同一个时间段上的定时器事件插入到同一个链表中的步骤包括:按照触发时间的先后顺序在同一个时间段上将触发时间在该同一个时间段上的定时器事件插入到同一个链表中。
为了实现上述目的,根据本申请的另一方面,还提供一种定时器的处理装置,其包括:划分单元,用于将定时器事件的触发时间划分成多个时间段,其中,每一个所述时间段对应于一个哈希值;插入单元,用于将触发时间在同一个时间段上的定时器事件插入到同一个链表中;映射单元,用于将各个所述链表中的定时器事件映射到哈希表中,其中,每一个定时器事件在哈希表中对应地存储有一个哈希值以及该定时器事件所在的链表的标识。
优选地,所述定时器的处理装置还包括:获取单元,用于在将各个所述链表中的定时器事件映射到哈希表中之后,获取当前时间段所对应的当前哈希值;查找单元,用于在所述哈希表中查找与所述当前哈希值对应的链表的标识;执行单元,用于执行查找到的链表的标识指示的链表中的定时器事件。
在本申请中,由于将各个所述链表中的定时器事件映射到哈希表中,其中,每一个定时器事件在哈希表中对应地存储有一个哈希值以及该定时器事件所在的链表的标识,因此,在查找定时器事件时,对于属于同一个哈希值的定时器事件,可以仅执行一次查找操作即得到对应于哈希值的链表,并得到该链表下的所有定时器事件,从而大大降低了比较操作执行的次数,解决了现有技术中定时器的处理方式系统开销比较大的问题,实现了减小处理定时器事件的系统开销的技术效果。
附图说明
构成本申请的一部分的附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是根据本申请实施例的定时器的处理方法的一种优选地流程图;
图2是根据本申请实施例的对新增定时器事件的定时器的处理方法的一种优选地流程图;
图3是根据本申请实施例的创建哈希表的一种优选地流程示意图;
图4是根据本申请实施例的创建由定时器事件组成的任务队列的一种优选地流程示意图;
图5是根据本申请实施例的任务线程对任务队列进行调度的一种优选地流程图;
图6是根据本申请实施例的执行定时器事件的一种优选地流程图;
图7是根据本申请实施例的定时器的处理装置的一种优选地示意图;
图8是根据本申请实施例的定时器的处理装置另一种优选地示意图;
图9是根据本申请实施例的定时器的处理装置的又一种优选地示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
实施例1
图1是根据本申请实施例的定时器的处理方法的流程图。如图1所示,该定时器的处理方法包括:
步骤S102,将定时器事件的触发时间划分成多个时间段,其中,每一个所述时间段对应于一个哈希值。
优选地,在将定时器事件的触发时间换算为哈希值时,还可以根据精确度的要求进行换算,如果定时器精确度要求为1秒,则定时器事件的触发时间采用32位的二进制数据来表示;如果定时器精确度要求为0.001秒,则定时器事件的触发时间采用64位的二进制数据来表示。
步骤S104,将触发时间在同一个时间段上的定时器事件插入到同一个链表中。
优选地,按照各个定时器事件的触发时间的时间顺序,将属于同一个哈希值的定时器事件插入到同一个链表中,即,实现了链表中各个定时器事件的有序存储。
步骤S106,将各个所述链表中的定时器事件映射到哈希表中,其中,每一个定时器事件在哈希表中对应地存储有一个哈希值以及该定时器事件所在的链表的标识。
基于上述步骤得到的链表和哈希表,由于将触发时间划分为多个时间段,并且将属于同一时间段的定时器事件换算为同一个哈希值,以及将同一个哈希值的定时器事件插入到同一个链表中,因而,在查找定时器事件时,只需要根据待查询的时间段信息,根据哈希值换算规则,得到哈希值,根据该哈希值就可以找到待查询的时间段内的定时器事件,仅执行一次查找操作,就可以得到对应于哈希值的链表,从而得到该链表下的所有定时器事件,即哈希值相同的定时器事件,可以提高查找的效率,进而能够减小系统开销。优选地,为了将各个链表映射到哈希表中,可以首先创建一个哈希表;在创建哈希表后,将步骤S104中得到的插入属于同一个哈希值的定时器事件的各个链表映射到创建的哈希表中。
具体地,如图3所示,创建的哈希表的格式为hash_map<time_t,list<CTimer*>>,其中,CTimer表示定时器事件的数据结构,list<CTimer*>表示由定时器事件所构成的链表,<time_t,list<CTimer*>>表示按照触发时间(time_t)对应的哈希值将各个链表映射到哈希表中。
基于上述实施例1提供的这种处理方式,结合了离散和线性两种处理方式,即,结合了由哈希值构成哈希表的离散处理方式以及由链表线性存储同一哈希值的定时器事件的线性处理方式,在插入定时器事件时,只需要经过哈希计算,得到哈希值,并在找到对应哈希值的链表后,将该定时器事件插入该链表中即可,这不但避免有序链表方案在插入定时器事件时需要查找触发时间在整个链表中的位置而导致的查找开销大的问题,而且避免了时间轮方案在需要预先分配存储空间而导致存储空间浪费的问题,其不但具有存储简单、开销小的优点,而且可以有效地利用存储空间。
实施例2
需要说明的是,该实施例中的定时器的处理方法既可以包括对已有定时器事件的处理方法,也可以包括对新增定时器事件的处理方法。图2即为根据本申请实施例的对新增定时器事件的定时器的处理方法的流程图。
假定新增多个定时器事件,此处仅以新增第一定时器事件为例进行描述,其中,该第一定时器事件可以是多个新增定时器事件中的任意一个定时器事件。具体包括如下步骤:
步骤S202,将第一定时器事件的触发时间换算为第一哈希值。
步骤S204,查找第一哈希值对应的链表。
步骤S206,判断是否能够查找到与第一哈希值对应的链表,若判断结果为是,则执行步骤S210,否则,执行步骤S208。
步骤S208,创建对应于第一哈希值的链表。
通过该步骤S208,由于通过按照哈希值创建相应的链表,能够使得每个创建的链表分别对应于同一个哈希值,从而在出现同一哈希值对应的定时器事件时,可以直接将定时器事件插入到所创建的链表中。
步骤S210,将第一定时器事件插入到相应的链表中。
优选地,在该步骤S210中,每间隔一段时间,例如第一预设时间,判断一次是否有新的定时器事件产生,若确定有新的定时器事件产生时,执行一次插入,此时步骤S210还包括以下步骤S210-1至步骤S210-2:
步骤S210-1,判断计时的时间长度是否达到第一预设时间长度,其中,该第一预设时间长度可以是根据实际需要设定的任意时间长度,在确定一个时间点之后,从该时间点开始计时,并判断计时的时间长度是否达到第一预设时间长度,其中,在第一次执行插入时,计时的开始时间点可以是任意设定的时间点,在后续执行插入时,计时的开始时间点为执行上一次插入结束时的时间点;以及
步骤S210-2,在计时的时间长度达到第一预设时间长度时,将该计时的时间长度内新增的、需要插入到链表中的定时器事件插入到对应的链表中,其中,将触发时间在同一个时间段上的定时器事件插入到同一个链表中。
根据上述的插入方式,可以每隔预定的时间对需要插入链表的定时器事件执行批量地插入操作,而不是在一出现需要插入链表的定时器事件就执行插入操作,这样可以进一步地减小系统开销。
由于在新增一个定时器事件时,直接查找该定时器事件对应的链表,然后将定时器事件插入到对应的链表中,使得在每增加一个定时器事件时,就能够将该定时器事件存储到预设的位置,实现了定时器事件的有序存储的技术效果。
实施例3
基于上述实施例1或2所得到的哈希表,通过调度可以执行链表中的各个定时器事件。本实施例提供了一种优选地定时器事件的调度方式。
以下对本申请实施例的调度过程进行描述,该调度过程包括以下步骤:
步骤S1,将各个所述链表中的定时器事件映射到哈希表中之后,获取当前时间段所对应的当前哈希值;
步骤S2,在所述哈希表中查找与所述当前哈希值对应的链表的标识;
步骤S3,执行查找到的链表的标识指示的链表中的定时器事件。
对于如何执行查找到的链表的标识指示的链表中的定时器事件,本申请提供了几种优选的实现方式,具体包括如下步骤:
1)步骤S3-1,创建任务队列;
任务队列用于放置当前需要执行的定时器事件。具体地,如图4所示,该图示出了创建一个由定时器事件组成的任务队列的过程,首先初始化程序,然后创建一个由定时器事件CTimer*所构成的任务队列queue。
在创建任务队列之后,任务线程可以从任务队列中获取定时器事件。
2)步骤S3-2(调度步骤):用于将预定的时间段换算成至少一个哈希值,根据该哈希值,在哈希表中查找对应的链表,将查找到的链表中的定时器事件加入任务队列中,执行任务队列中的定时器事件。
上述预定的时间段可以为需要调度的定时器事件的触发时间所对应的时间段,也可以是根据实际需要设置的任意长度的时间段。在本实施例中,首先根据定时器事件的触发时间确定需要调度的定时器事件,然后再对定时器事件进行调度。
具体地,该步骤S3-2中的调度步骤可以包括步骤S3-2-1至步骤S3-2-3:
步骤S3-2-1,创建调度线程;
步骤S3-2-2,调度线程查找哈希表中的定时器事件;
在该步骤S3-2-2中,基于上述实施例所得到的哈希表,调度线程以链表为单位查找哈希表中哈希值对应的定时器事件。
具体地,由于在哈希表中,将触发时间划分为多个时间段,并且将属于同一时间段的定时器事件换算为同一个哈希值,以及将同一个哈希值的定时器事件插入到同一个链表中,因而,在调度线程查找定时器事件时,只需要根据待查询的时间段信息,根据哈希值换算规则,得到哈希值,根据该哈希值就可以找到待查询的时间段内的定时器事件,仅执行一次查找操作,就可以得到对应于哈希值的链表,从而得到该链表下的所有定时器事件,即以链表为单位查找哈希表中哈希值对应的定时器事件,提高了查找的效率,进而减小了系统开销。
为了减少系统开销,每隔预定时间唤醒一次所述调度线程,例如,每间隔第二预设时间段唤醒一次,将当前查找到的定时器事件加入到任务队列中,在执行完操作后进入休眠状态。具体地,本优选的实施例还提供了执行任务队列中的定时器事件的步骤S3-2-2,其中,该步骤S3-2-2还包括步骤S3-2-2-1和步骤S3-2-2-2:
步骤S3-2-2-1,调度线程每间隔第二预设时间段唤醒一次;
步骤S3-2-2-2,取出第二预设时间段前后时间值对应的哈希值范围,以查找哈希表中的定时器事件。
在查找到哈希表中的定时器事件之后,即可通过调度将所查找到的定时器事件加入到任务队列中,以便通过任务线程来执行任务队列中的定时器事件。
其中,该第二预设时间段可以是根据实际需要任意设定的时间段,通过使得调度线程每间隔第二预设时间段唤醒一次,可以使得调度线程不必一直处于唤醒状态,而是每间隔第二预设时间段之后,调度线程唤醒一次,相比于调度线程一直处于唤醒状态,或者不间断地执行调度,减小了系统开销。
例如,如图5所示,调度线程可以每间隔0.1秒唤醒一次,优选地,该调度线程的时间精确度可以是比定时器事件要求的精确度高至少一个数量级,这样可以使得整个执行定制器的过程满足定时器事件所需的精确度的要求,实现更精确地查找。比如定时器事件要求的时间精确度为1秒,那么调度线程可以每隔0.1秒唤醒一次。
以下对查找哈希表中的定时器事件的过程进行描述:
调度线程每间隔一段时间唤醒一次,以查找哈希表中的定时器事件,在查找完毕后重新进入休眠状态,具体地,调度线程(比如间隔0.1秒)自唤醒之后判断任务队列中是否有定时器事件,在判断结果为是时,执行步骤a,否则,执行步骤b。
步骤a,调度线程从上一次唤醒的时间值对应的哈希值last_KEY到当前时间值对应的哈希值now_KEY的范围内,查找哈希表中KEY对应的定时器事件链表。
步骤b,用当前时间值替换上一次时间值,从而更新上一次唤醒的时间值,以便在下次执行查找时,从最近的上一次唤醒的时间值对应的哈希值last_KEY到当前时间值对应的哈希值now_KEY的范围内,查找哈希表中KEY对应的定时器事件链表。
步骤S3-2-3,调度线程在查找到哈希表中存在哈希值对应的定时器事件时,可以将查找到的链表中的定时器事件加入到任务队列中以完成对定时器事件的调度。
如前述实施例所述,在哈希表中,定时器事件的存储格式为hash_map<time_t,list<CTimer*>>。在该步骤S3-2-3中,在查找到哈希表中存在哈希值对应的定时器事件时,可以从哈希表中得到定时器事件链表list<CTimer*>。
在时间已知的情况下,通过步骤S3-2-1至步骤S3-2-3,就可以获取与该时间相对应的定时器事件的链表,然后将获取的链表中的定时器事件放入任务队列中并完成对定时器事件的调度。
在该实施例中,通过步骤S3-2-2可以看出,本申请实施例所创建的调度线程是以链表为单位查找哈希表中哈希值对应的定时器事件,在查找到一个链表时,就可以查找到该链下的对应同一哈希值的所有定时器事件,因而,通过采用本申请实施例所提供的调度方法,可以极大地提高调度线程的查找效率。
实施例4
在完成上述步骤S3-2中的调度步骤之后,或者,在执行完步骤上述S3-2-2中将查找到的链表中的定时器事件加入到任务队列中之后,还可以通过任务线程执行任务队列中的定时器事件。
因而,本申请实施例所提供的定时器的处理方法还可以包括定时器事件的执行过程。
需要说明的是,基于上述本申请实施例所提供的定时器事件的存储方式,以及定时器事件的调度方法,本申请实施例所提供的定时器事件的执行过程可以是采用常规的方式来执行,也可以是采用以下本申请实施例所提供的优选方式来执行。
图6示出了任务线程从任务队列中获取任务以执行定时器事件的方法。
如图6所示,上述执行定时器事件的过程可以包括以下步骤:
步骤S602,创建任务线程;
步骤S604,在创建一定数量的任务线程之后,任务线程等待从任务队列中获取定时器事件。
为了减少系统开销,优选地,任务线程每间隔一段时间唤醒一次,执行任务队列中的定时器事件,并且在执行完任务队列中的定时器事件后,重新进入休眠状态。或者,在执行完步骤S3-2-2中将查找到的链表中的定时器事件置于任务队列中之后,唤醒任务线程以执行任务队列中的定时器事件,以及在执行完任务队列中的定时器事件后,重新进入休眠状态。
步骤S606,任务线程判断任务队列中是否有任务;在判断结果为是时,执行步骤S608,在判断结果为否时,执行步骤S604,等待下一次唤醒,并继续判断任务队列中是否有任务。
步骤S608,任务线程从任务队列中获取定时器事件。
步骤S610,执行定时器事件。
在本申请中,由于把定时器事件按照触发时间,根据精确度的要求换算成一个哈希值,将其映射到一个支持离散存储的容器中(哈希表)。以及用离散存储(哈希表)和线性存储(链表)相结合的方式来存储和管理定时器事件。即将同一个时间段内触发的定时器事件的触发时间换算为一个哈希值,用同一个链表一个时间段内触发的定时器事件,并将该链表映射到哈希表中。更进一步地,可以用调度线程和任务线程分离的方式分别完成触发和运行定时器事件。调度线程可以从哈希表中获取事件元素链表,并将每个元素放置在任务队列中。任务线程负责从任务队列中获取元素并处理。从而在获取到时间范围的情况下,可以直接获取时间范围所对应的定时器事件的链表以获取到链表中的所有定时器事件,这有效降低了对海量元素定时器处理的系统开销。
需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
实施例5
本申请实施例还提供了一种定时器的处理装置,该定时器的处理装置可以用于实现上述本申请实施例提供的定时器的处理方法。
图7是根据本申请实施例定时器的处理装置的一种优选示意图。
如图7所示,该定时器的处理装置包括:
1)划分单元702,用于将定时器事件的触发时间划分成多个时间段,其中,每一个所述时间段对应于一个哈希值。
优选地,在所述划分单元702将定时器事件的触发时间换算为哈希值时,还可以根据精确度的要求进行换算,如果定时器的精确度要求为1秒,则定时器事件的触发时间采用32位的二进制数据来表示;如果定时器精确度要求为0.001秒,则定时器事件的触发时间采用64位的二进制数据来表示。
2)插入单元704,用于将触发时间在同一个时间段上的定时器事件插入到同一个链表中。
优选地,所述插入单元704按照各个定时器事件的触发时间的时间顺序,将属于同一个哈希值的定时器事件插入到同一个链表中,即,实现了链表中各个定时器事件的有序存储。
3)映射单元706,用于将各个所述链表中的定时器事件映射到哈希表中,其中,每一个定时器事件在哈希表中对应地存储有一个哈希值以及该定时器事件所在的链表的标识。
优选地,为了将各个链表映射到哈希表中,可以首先创建一个哈希表;在创建哈希表后,映射单元706将插入单元704得到的插入属于同一个哈希值的定时器事件的各个链表映射到创建的哈希表中。
在上述定时器的处理装置中,由于所述划分单元702将触发时间划分为多个时间段,并且将属于同一时间段的定时器事件换算为同一个哈希值,以及所述插入单元704将同一个哈希值的定时器事件插入到同一个链表中,因而,在查找定时器事件时,只需要根据待查询的时间段信息,根据哈希值换算规则,得到哈希值,根据该哈希值就可以找到待查询的时间段内的定时器事件,仅执行一次查找操作,就可以得到对应于哈希值的链表,从而得到该链表下的所有定时器事件,即哈希值相同的定时器事件,可以提高查找的效率,进而能够减小系统开销。
图8是根据本申请实施例的定时器的处理装置另一种的优选示意图。如图8所示,上述定时器的处理装置还可以包括:
1)获取单元802,用于在将各个所述链表中的定时器事件映射到哈希表中之后,获取当前时间段所对应的当前哈希值。
2)查找单元804,用于在所述哈希表中查找与所述当前哈希值对应的链表的标识。
3)执行单元806,用于执行查找到的链表的标识指示的链表中的定时器事件。
对于如何执行查找到的链表的标识指示的链表中的定时器事件,本申请提供了几种优选的实现方式,优选地,所述执行单元806包括:
1)创建模块8061,用于创建任务队列,其中,任务队列用于放置当前需要执行的定时器事件。
2)调度模块8062,用于将预定的时间段换算成至少一个哈希值,根据该哈希值,在哈希表中查找对应的链表;将查找到的链表中的定时器事件加入任务队列中,以便由任务线程来执行任务队列中的定时器事件。
优选地,所述调度模块8062通过以下步骤将查找到的链表中的定时器事件加入任务队列中:创建调度线程;每隔预定时间唤醒所述调度线程;所唤醒的调度线程判断是否存在所述查找到的链表中的定时器事件以及在判断出存在所述查找到的链表中的定时器事件时,所述唤醒的调度线程将查找到的链表中的定时器事件加入所述任务队列中。
上述实施例中,用调度线程和任务线程分离的方式分别完成触发和运行定时器事件。调度线程可以从哈希表中获取事件元素链表,并将每个元素放置在任务队列中。任务线程负责从任务队列中获取元素并处理。从而在获取到时间范围的情况下,可以直接获取时间范围所对应的定时器事件的链表以获取到链表中的所有定时器事件,这有效降低了对海量元素定时器处理的系统开销。
优选地,图9是根据本申请实施例的定时器的处理装置又一种优选地示意图。如图9所示,所述插入单元704还包括:
1)判断模块7041,用于在将触发时间在同一个时间段上的定时器事件插入到同一个链表中的过程中,判断待处理的定时器事件的触发时间所处的时间段;
2)获取模块7042,用于获取所处的时间段对应的哈希值;
3)查找模块7043,用于查找与所获取到的哈希值对应的链表;
4)插入模块7044,用于将所述待处理的定时器事件插入到所查找到的链表中。
优选地,插入单元704还包括:
5)创建模块7045,用于在所述查找模块查找不到与所获取到的哈希值对应的链表时,创建与所获取到的哈希值对应的链表,并将所创建的链表作为所述查找到的链表。
优选地,所述插入单元704还用于按照触发时间的先后顺序在同一个时间段上将触发时间在该同一个时间段上的定时器事件插入到同一个链表中。
在上述实施例中,由于将触发时间划分为多个时间段,并且将属于同一时间段的定时器事件换算为同一个哈希值,将同一个哈希值的定时器事件插入到同一个链表中,因而,在查找定时器事件时,只需要根据待查询的时间段信息,根据哈希值换算规则,得到哈希值,根据该哈希值就可以找到待查询的时间段内的定时器事件,仅执行一次查找操作,就可以得到对应于哈希值的链表,从而得到该链表下的所有定时器事件,即哈希值相同的定时器事件。本申请实施例提供的这种处理方式,结合了离散和线性两种处理方式,即结合了由哈希值构成哈希表离散处理方式以及由链表线性存储同一哈希值的定时器事件,在插入定时器事件时,只需要经过哈希计算,得到哈希值,并在找到对应哈希值的链表后,将该定时器事件插入该链表中即可,这不但避免有序链表方案插入定时器事件时需要查找到对应的具体插入链表的位置而导致存在开销大的问题,而且避免了时间轮方案需要预先分配存储空间而导致存储空间浪费的问题,具有存储简单、开销小的优点,并且可以有效地利用存储空间。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
从以上的描述中,可以看出,本申请实现了降低对海量元素定时器处理的系统开销以及节约内存空间的效果。
显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
以上所述仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (10)

1.一种定时器的处理方法,其特征在于,包括:
将定时器事件的触发时间划分成多个时间段,其中,每一个所述时间段对应于一个哈希值;
将所述触发时间在同一个时间段上的定时器事件插入到同一个链表中;以及
将各个所述链表中的定时器事件映射到哈希表中,其中,每一个所述定时器事件在哈希表中对应地存储有一个哈希值以及该定时器事件所在的链表的标识。
2.根据权利要求1所述的方法,其特征在于,所述将各个所述链表中的定时器事件映射到哈希表中之后,还包括:
获取当前时间段所对应的当前哈希值;
在所述哈希表中查找与所述当前哈希值对应的链表的标识;
执行查找到的链表的标识指示的链表中的定时器事件。
3.根据权利要求2所述的方法,其特征在于,所述执行查找到的链表的标识指示的链表中的定时器事件的步骤包括:
创建任务队列;
将查找到的链表中的定时器事件加入所述任务队列中;
执行所述任务队列中的定时器事件。
4.根据权利要求3所述的方法,其特征在于,所述将查找到的链表中的定时器事件加入所述任务队列中的步骤包括:
创建调度线程;
所述调度线程判断是否存在所述查找到的链表中的定时器事件;以及
在判断出存在所述查找到的链表中的定时器事件时,唤醒的调度线程将查找到的链表中的定时器事件加入所述任务队列中。
5.根据权利要求4所述的方法,其特征在于,所述执行任务队列中的定时器事件的步骤包括:
任务线程执行任务队列中的定时器事件。
6.根据权利要求1所述的方法,其特征在于,所述将触发时间在同一个时间段上的定时器事件插入到同一个链表中的步骤具体包括:
判断待处理的定时器事件的触发时间所处的时间段;
获取所述触发时间所处的时间段对应的哈希值;
查找与所获取到的哈希值对应的链表;
将所述待处理的定时器事件插入到所查找到的链表中。
7.根据权利要求6所述的方法,其特征在于,所述查找与所获取到的哈希值对应的链表的步骤包括:
在查找不到与所获取到的哈希值对应的链表时,创建与所获取到的哈希值对应的链表,并将所创建的链表作为所述查找到的链表。
8.根据权利要求1所述的方法,其特征在于,所述将触发时间在同一个时间段上的定时器事件插入到同一个链表中的步骤包括:
按照触发时间的先后顺序在同一个时间段上将触发时间在该同一个时间段上的定时器事件插入到同一个链表中。
9.一种定时器的处理装置,其特征在于,包括:
划分单元,用于将定时器事件的触发时间划分成多个时间段,其中,每一个所述时间段对应于一个哈希值;
插入单元,用于将触发时间在同一个时间段上的定时器事件插入到同一个链表中;
映射单元,用于将各个所述链表中的定时器事件映射到哈希表中,其中,每一个定时器事件在哈希表中对应地存储有一个哈希值以及该定时器事件所在的链表的标识。
10.根据权利要求9所述的装置,其特征在于,还包括:
获取单元,用于在将各个所述链表中的定时器事件映射到哈希表中之后,获取当前时间段所对应的当前哈希值;
查找单元,用于在所述哈希表中查找与所述当前哈希值对应的链表的标识;
执行单元,用于执行查找到的链表的标识指示的链表中的定时器事件。
CN201110362316.1A 2011-11-15 2011-11-15 定时器的处理方法及装置 Active CN103106222B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110362316.1A CN103106222B (zh) 2011-11-15 2011-11-15 定时器的处理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110362316.1A CN103106222B (zh) 2011-11-15 2011-11-15 定时器的处理方法及装置

Publications (2)

Publication Number Publication Date
CN103106222A CN103106222A (zh) 2013-05-15
CN103106222B true CN103106222B (zh) 2017-03-08

Family

ID=48314085

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110362316.1A Active CN103106222B (zh) 2011-11-15 2011-11-15 定时器的处理方法及装置

Country Status (1)

Country Link
CN (1) CN103106222B (zh)

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103530179A (zh) * 2013-09-30 2014-01-22 大唐移动通信设备有限公司 一种定时任务的处理方法及装置
CN103699487A (zh) * 2013-12-27 2014-04-02 北京像素软件科技股份有限公司 实现自动触发逻辑的方法和装置
CN104809135B (zh) * 2014-01-27 2019-01-11 腾讯科技(深圳)有限公司 一种数据存取方法及装置
CN104301134B (zh) * 2014-08-27 2017-12-12 烽火通信科技股份有限公司 软件设计中基于海量定时器的管理方法及系统
CN104268015B (zh) * 2014-09-05 2017-08-01 烽火通信科技股份有限公司 嵌入式设备高可用性定时器的实现方法及定时器
CN104503761A (zh) * 2014-12-30 2015-04-08 浪潮(北京)电子信息产业有限公司 一种利用时间转盘处理定时任务的方法和装置
CN105138401B (zh) * 2015-08-07 2019-08-30 黑龙江大学 基于线性链表的实时任务可调度性测试直接模拟方法
CN105183640B (zh) * 2015-08-07 2018-06-12 黑龙江大学 基于线性链表的实时任务可调度性测试拷贝模拟方法
CN105224400B (zh) * 2015-08-07 2019-03-22 黑龙江大学 采用线性链表记录实时任务调度过程的方法
CN106775620B (zh) * 2016-11-14 2020-05-12 武汉斗鱼网络科技有限公司 一种定时方法及装置
CN106528286A (zh) * 2016-11-22 2017-03-22 北京智芯微电子科技有限公司 一种实现定时器的方法和装置
CN106777293A (zh) * 2016-12-29 2017-05-31 北京奇虎科技有限公司 数据存储和查找方法及装置
CN106815158A (zh) * 2017-01-17 2017-06-09 深圳市新威尔电子有限公司 基于Linux系统的定时方法及装置
CN109426554B (zh) * 2017-08-22 2020-10-09 中移(杭州)信息技术有限公司 一种服务器的定时实现方法及装置
CN107634993B (zh) * 2017-09-05 2019-08-13 腾讯科技(深圳)有限公司 一种信息推送事件处理方法、装置及电子设备
CN107886438A (zh) * 2017-11-29 2018-04-06 中国平安财产保险股份有限公司 车险保单自助批改方法、装置、设备及可读存储介质
CN111782414B (zh) * 2020-05-12 2024-04-19 北京皮尔布莱尼软件有限公司 一种延时消息处理方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1441570A (zh) * 2002-02-28 2003-09-10 深圳市中兴通讯股份有限公司上海第二研究所 嵌入式实时操作系统中定时器的计时方法
CN101859260A (zh) * 2010-05-14 2010-10-13 中国科学院计算技术研究所 用于操作系统中的定时器管理装置和管理方法
CN102129393A (zh) * 2011-03-09 2011-07-20 南京恩瑞特实业有限公司 通用定时任务管理的实现方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100337192C (zh) * 2003-08-13 2007-09-12 华为技术有限公司 一种定时器管理方法
CN101957779B (zh) * 2010-09-16 2013-04-03 深圳天源迪科信息技术股份有限公司 定时器的管理方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1441570A (zh) * 2002-02-28 2003-09-10 深圳市中兴通讯股份有限公司上海第二研究所 嵌入式实时操作系统中定时器的计时方法
CN101859260A (zh) * 2010-05-14 2010-10-13 中国科学院计算技术研究所 用于操作系统中的定时器管理装置和管理方法
CN102129393A (zh) * 2011-03-09 2011-07-20 南京恩瑞特实业有限公司 通用定时任务管理的实现方法

Also Published As

Publication number Publication date
CN103106222A (zh) 2013-05-15

Similar Documents

Publication Publication Date Title
CN103106222B (zh) 定时器的处理方法及装置
Tang et al. An intermediate data placement algorithm for load balancing in spark computing environment
Gunney et al. Advances in patch-based adaptive mesh refinement scalability
CN105045856B (zh) 一种基于Hadoop的大数据遥感卫星数据处理系统
Diaz et al. Energy-aware fast scheduling heuristics in heterogeneous computing systems
CN102158513A (zh) 一种服务器集群节能的方法、装置和服务器集群
CN104735095A (zh) 一种云计算平台作业调度方法及装置
WO2002003258A1 (en) Method and apparatus for heterogeneous distributed computation
CN102929989B (zh) 一种地理空间数据在云计算平台上的负载均衡方法
CN104111936A (zh) 数据查询方法和系统
CN103957261A (zh) 一种基于能耗优化的云计算资源分配的方法
CN102195890B (zh) 一种基于云计算的互联网应用调度方法
Djidjev et al. All-Pairs Shortest Path algorithms for planar graph for GPU-accelerated clusters
CN107563955A (zh) 一种基于gpu的并行地图切片方法及系统
CN103699443A (zh) 任务分发方法及扫描器
CN103825946B (zh) 一种基于网络感知的虚拟机放置方法
CN115619005A (zh) 一种智能用电网络资源优化配置方法及系统
Katti et al. Competitive cache replacement strategies for shared cache environments
CN106156049A (zh) 一种数据读取的方法和系统
US20200125417A1 (en) System and method for handling data skew at run time
CN105049499A (zh) 一种基于多立方体映射的网络功能虚拟化资源分配方法
CN102780766A (zh) 面向云制造的设计服务资源跨域组建方法
Liu et al. KubFBS: A fine‐grained and balance‐aware scheduling system for deep learning tasks based on kubernetes
CN112445776A (zh) 基于Presto的动态分桶方法、系统、设备及可读存储介质
CN101833585A (zh) 数据库服务器操作控制系统、方法及设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 1181496

Country of ref document: HK

C14 Grant of patent or utility model
GR01 Patent grant