CN107102892B - 定时器的处理方法和装置 - Google Patents
定时器的处理方法和装置 Download PDFInfo
- Publication number
- CN107102892B CN107102892B CN201710194212.1A CN201710194212A CN107102892B CN 107102892 B CN107102892 B CN 107102892B CN 201710194212 A CN201710194212 A CN 201710194212A CN 107102892 B CN107102892 B CN 107102892B
- Authority
- CN
- China
- Prior art keywords
- node
- task
- origin
- predetermined time
- chained list
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/5038—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明实施例提供了一种定时器的处理方法和装置。所述定时器的处理方法,包括:获取系统中每个任务的预定发生时间;将每个任务的预定发生时间对应一个第一节点;按照所述每个第一节点对应的预定发生时间的顺序,将所述第一节点组成至少两层的跳表结构的任务队列。本发明能够提供一种操作快速的定时器的处理方法。
Description
技术领域
本发明涉及定时器技术领域,尤其涉及一种定时器的处理方法和装置。
背景技术
分布式存储系统需要处理大量的io以及其他策略任务,其中定时器是一个必不可少的组件。但使用场景的不同,对定时器的实现考虑也不尽相同。不同定时器的时间中,区别在于定时器的复杂度和时间精度。
复杂度在于任务队列排序的实现,如何排序和快速获取当下第一个待开始的任务。精度在于任务开始时间的时间精度。不同实现主要在于不同复杂度的实现,当前技术大部分使用堆栈、红黑树、时间轮、列表。
现有技术中,算法均比较复杂,处理的速度比较慢。
发明内容
本发明的实施例提供了一种定时器的处理方法和装置,能够提供一种实现相对简单、操作快速的定时器。
为了实现上述目的,本发明采取了如下技术方案。
一种定时器的处理方法,包括:
获取系统中每个任务的预定发生时间;
将每个任务的预定发生时间对应一个第一节点;
按照每个所述第一节点对应的预定发生时间的顺序,将所述第一节点组成至少两层的跳表结构的任务队列。
一种定时器的处理装置,包括:
第一获取单元,获取系统中每个任务的预定发生时间;
第一对应单元,将每个任务的预定发生时间对应一个第一节点;
组建单元,按照每个所述第一节点对应的预定发生时间的顺序,将所述第一节点组成至少两层的跳表结构的任务队列。
由上述本发明的实施例提供的技术方案可以看出,本发明实施例中,通过构建跳表结构的任务队列,能够提高系统的操作速度。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的一种定时器的处理方法的处理流程图;
图2为本发明实施例提供的跳表结构的任务队列的示意图。
图3为本发明实施例提供的任务队列的处理方法的处理流程图;
图4为本发明实施例二提供的一种定时器的处理装置的连接示意图。
具体实施方式
下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
如图1所示,本发明提供一种定时器的处理方法,包括:
步骤11,获取系统中每个任务的预定发生时间;
步骤12,将每个任务的预定发生时间对应一个第一节点;
步骤13,按照每个所述第一节点对应的预定发生时间的顺序,将所述第一节点组成至少两层的跳表结构的任务队列。如图2所示,为本发明所述的跳表结构的任务队列的示意图。
本发明组建任务队列时,采用跳表结构;后续处理时,需要按时间顺序查找新任务的插入位置,从而将新任务插入任务队列。采用跳表结构的查找方式,能够加快查找的处理速度。
其中,步骤13包括:
步骤131,按照所述预订发生时间的顺序,将所述第一节点组成第一层链表。该步骤中,所述第一节点可以包括第一指针,所述第一指针指向所述第一层链表中的下一个节点的地址。
步骤132,从所述第一层链表的第一节点中提取部分节点,作为第二节点;
步骤133,按照所述第二节点对应的预定 发生时间的顺序,将所述第二节点组成第二层链表。该步骤中,第二节点包括:第二指针和第三指针,所述第二指针用于指向所述第二层链表中的下一个节点的地址,所述第三指针用于指向与所述第二节点的预定 发生时间相同的所述第一节点的地址。
上述实施例中,可以设置多层链表,链表的层数可以根据任务节点的多少来进行设置。
可选的,所述方法还包括:
步骤14,获取系统中新任务的预定发生时间;
步骤15,将所述新任务的预定发生时间对应一个第三节点;
步骤16,根据所述第三节点对应的新任务的预定发生时间,查找所述第三节点在所述任务队列中的位置;
步骤17,按照查找到的所述位置,将所述第三节点插入到所述跳表结构的任务队列中。
步骤17具体包括:
步骤171,将所述第三节点的预定发生时间,与所述第二层链表中的第二节点对应的预定发生时间进行比较,获取所述第三节点在第二层链表的最小区间;所述最小区间的两个边界由第二层链表中的两个第四节点界定;
步骤172,获取所述第二层链表的所述两个第四节点对应的所述第一层链表中的两个第五节点;
步骤173,在所述两个第五节点组成的区间里,查找所述新任务对应的第三节点在所述第一层链表中的位置。
上述实施例中,在组建任务队列时,采用跳表结构;后续处理时,需要按时间顺序查找新任务的插入位置,从而将新任务插入任务队列。采用跳表结构的查找方式,能够加快查找速度。
可选的,所述方法还包括:
步骤18,定期获取当前时间;
步骤19,从所述任务队列中获取第一个任务的计划执行时间;
步骤110,根据所述第一个任务的计划执行时间和所述当前时间,判断是否需要启动所述第一个任务;步骤110具体为:判断所述当前时间是否晚于或者等于所述第一个任务对应的预定发生时间,判断是否需要启动所述第一个任务;
步骤111,如果为是,则启动所述第一个任务,并从所述任务队列中删除所述第一个任务对应的节点。
所述方法还包括:
步骤112,判断所述第一个任务是否下次执行;
步骤113,如果为是,则根据所述第一个任务的下次执行时间,将所述第一个任务对应的节点插入所述跳表结构的任务队列。
如图3所示,为本发明所示的任务队列的处理示意图。本发明可以用于分布式存储系统。分布式存储系统需要处理大量的io以及其他策略任务,其中定时器是一个必不可少的组件。对于定时器实现,不同实现之间的差异在于时间精度和任务队列的实现。本实施例中,可以采用纳秒为精度,基于跳表实现一种实现相对简单,操作快速的定时器。
基于跳表的定时器具体实现为:任何时间产生新任务,都及时插入任务队列。
当定时器任务检查循环开始,检查判断任务队列中第一个任务是否需要开始执行;如不需要,任务检查循环进入等待,直到检查的第一个任务的开始时间的时刻再做检查判断是否要执行;如需要执行,从任务队列中删除该任务,执行该任务,并获得下次执行时间。然后判断该任务是否需要再次执行,如不需要下次执行,那么循环回到检查任务队列的第二个任务是否需要执行;如需要再次执行,就将该任务id和下次执行时间插入任务队列。然后再次循环检查任务队列中第一个任务是否需要当前时间执行。
本发明的任务队列的实现是基于跳表的,基于跳表的特性,实现简单,操作快速,使得基于跳表的定时器实现简单,操作快速。
如图4所示,为本发明所述的一种定时器的处理装置,包括:
第一获取单元21,获取系统中每个任务的预定发生时间;
第一对应单元22,将每个任务的预定发生时间对应一个第一节点;
组建单元23,按照每个所述第一节点对应的预定发生时间的顺序,将所述第一节点组成至少两层的跳表结构的任务队列。
所述组建单元包括:
第一组建子单元231,按照所述预定 发生时间的顺序,将所述第一节点组成第一层链表;
提取子单元232,从所述第一层链表的第一节点中提取部分节点,作为第二节点;
第二组建子单元233,按照所述第二节点对应的预定 发生时间的顺序,将所述第二节点组成第二层链表。
可选的,所述装置还包括:
第二获取单元24,获取系统中新任务的预定发生时间;
第二对应单元25,将所述新任务的预定发生时间对应一个第三节点;
查找单元26,根据所述第三节点对应的新任务的预定发生时间,查找所述第三节点在所述任务队列中的位置;
插入单元27,按照查找到的所述位置,将所述第三节点插入到所述跳表结构的任务队列中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。
Claims (5)
1.一种定时器的处理方法,其特征在于,包括:
获取系统中每个任务的预定发生时间;
将每个任务的预定发生时间对应一个第一节点;
按照每个所述第一节点对应的预定发生时间的顺序,将所述第一节点组成至少两层的跳表结构的任务队列;
所述按照每个所述第一节点对应的预定发生时间的顺序,将所述第一节点组成至少两层的跳表结构的任务队列的步骤包括:
按照所述预定 发生时间的顺序,将所述第一节点组成第一层链表;
从所述第一层链表的第一节点中提取部分节点,作为第二节点;
按照所述第二节点对应的预定 发生时间的顺序,将所述第二节点组成第二层链表;
所述方法还包括:
获取系统中新任务的预定发生时间;
将所述新任务的预定发生时间对应一个第三节点;
根据所述第三节点对应的新任务的预定发生时间,查找所述第三节点在所述任务队列中的位置;
按照查找到的所述位置,将所述第三节点插入到所述跳表结构的任务队列中;
所述根据所述第三节点对应的新任务的预定发生时间,查找所述第三节点在所述任务队列中的位置的步骤包括:
将所述第三节点的预定发生时间,与所述第二层链表中的第二节点对应的预定发生时间进行比较,获取所述第三节点在第二层链表的最小区间;所述最小区间的两个边界由第二层链表中的两个第四节点界定;
获取所述第二层链表的所述两个第四节点对应的所述第一层链表中的两个第五节点;
在所述两个第五节点组成的区间里,查找所述新任务对应的第三节点在所述第一层链表中的位置。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
定期获取当前时间;
从所述任务队列中获取第一个任务的计划执行时间;
根据所述第一个任务的计划执行时间和所述当前时间,判断是否开始执行所述第一个任务;
如果为是,则启动所述第一个任务,并从所述任务队列中删除所述第一个任务对应的节点。
3.根据权利要求2所述的方法,其特征在于,所述根据所述第一个任务的计划执行时间和所述当前时间,判断是否启动所述第一个任务的步骤包括:
通过判断所述当前时间是否晚于或者等于所述第一个任务对应的预定发生时间,来判断是否开始执行所述第一个任务。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
判断所述第一个任务是否下次执行;
如果为是,则根据所述第一个任务的下次执行时间,将所述第一个任务对应的节点插入所述跳表结构的任务队列。
5.一种定时器的处理装置,其特征在于,包括:
第一获取单元,获取系统中每个任务的预定发生时间;
第一对应单元,将每个任务的预定发生时间对应一个第一节点;
组建单元,按照每个所述第一节点对应的预定发生时间的顺序,将所述第一节点组成至少两层的跳表结构的任务队列;
所述组建单元包括:
第一组建子单元,按照所述预定 发生时间的顺序,将所述第一节点组成第一层链表;
提取子单元,从所述第一层链表的第一节点中提取部分节点,作为第二节点;
第二组建子单元,按照所述第二节点对应的预定 发生时间的顺序,将所述第二节点组成第二层链表;
所述装置还包括:
第二获取单元,获取系统中新任务的预定发生时间;
第二对应单元,将所述新任务的预定发生时间对应一个第三节点;
查找单元,根据所述第三节点对应的新任务的预定发生时间,查找所述第三节点在所述任务队列中的位置;
插入单元,按照查找到的所述位置,将所述第三节点插入到所述跳表结构的任务队列中;
所述查找单元具体为:
将所述第三节点的预定发生时间,与所述第二层链表中的第二节点对应的预定发生时间进行比较,获取所述第三节点在第二层链表的最小区间;所述最小区间的两个边界由第二层链表中的两个第四节点界定;
获取所述第二层链表的所述两个第四节点对应的所述第一层链表中的两个第五节点;
在所述两个第五节点组成的区间里,查找所述新任务对应的第三节点在所述第一层链表中的位置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710194212.1A CN107102892B (zh) | 2017-03-28 | 2017-03-28 | 定时器的处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710194212.1A CN107102892B (zh) | 2017-03-28 | 2017-03-28 | 定时器的处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107102892A CN107102892A (zh) | 2017-08-29 |
CN107102892B true CN107102892B (zh) | 2018-07-03 |
Family
ID=59675667
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710194212.1A Active CN107102892B (zh) | 2017-03-28 | 2017-03-28 | 定时器的处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107102892B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109901879B (zh) * | 2017-12-07 | 2020-10-20 | 普天信息技术有限公司 | 一种循环软件定时器实现方法 |
CN111026526B (zh) * | 2019-11-12 | 2024-01-30 | 珠海格力电器股份有限公司 | 程序的定时器配置方法、装置、存储介质及终端设备 |
CN111324621B (zh) * | 2020-02-19 | 2023-06-20 | 中国银联股份有限公司 | 事件处理方法、装置、设备及存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019805A (zh) * | 2011-09-20 | 2013-04-03 | 佳都新太科技股份有限公司 | 一种多线程环境下定时器的设置方法 |
US9032408B2 (en) * | 2012-09-07 | 2015-05-12 | Accedian Networks Inc. | System and method for intelligent timer services |
US9411641B2 (en) * | 2012-10-04 | 2016-08-09 | Lawrence J. Dickson | Method and apparatus implemented in processors for real-time scheduling and task organization based on response time order of magnitude |
CN104268015B (zh) * | 2014-09-05 | 2017-08-01 | 烽火通信科技股份有限公司 | 嵌入式设备高可用性定时器的实现方法及定时器 |
CN106020978B (zh) * | 2016-05-17 | 2019-05-21 | 扬州航盛科技有限公司 | 一种时间差量顺序链表定时器的执行方法 |
CN106201695A (zh) * | 2016-07-15 | 2016-12-07 | 郑州飞机装备有限责任公司 | 适用于嵌入式软件系统的多任务调度方法 |
-
2017
- 2017-03-28 CN CN201710194212.1A patent/CN107102892B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN107102892A (zh) | 2017-08-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107102892B (zh) | 定时器的处理方法和装置 | |
US20070094541A1 (en) | Method and apparatus for generating test execution sequences automatically for a software testing process | |
CN110738389A (zh) | 工作流处理方法、装置、计算机设备和存储介质 | |
CN103634375B (zh) | 扩容集群节点的方法、装置及设备 | |
CN108287751B (zh) | 任务执行方法及装置、分布式系统 | |
EP3101842B1 (en) | Method, system and computer readable medium for network management automation | |
CN106227751A (zh) | 一种存储文件的扫描方法和扫描设备 | |
CN106126326A (zh) | 定时任务管理方法和装置 | |
CN107870948A (zh) | 任务调度方法和装置 | |
CN106980571A (zh) | 一种测试用例集的构建方法和设备 | |
CN106412072A (zh) | 一种业务处理方法及装置 | |
CN103577252B (zh) | 一种软件分类的方法及装置 | |
CN105827460A (zh) | 一种网络设备自动化测试的方法、装置和系统 | |
CN104182348A (zh) | 软件测试方法及装置 | |
CN107861799A (zh) | 基于多线程环境的任务处理方法及装置 | |
CN104408372B (zh) | 一种基于系统重载的拟态安全实现系统及方法 | |
CN105550028B (zh) | 一种基于缓存锁的多任务时序执行方法及系统 | |
CN108123967A (zh) | 一种集群系统的数据同步方法和系统 | |
FI3683678T3 (fi) | Tietokoneella suoritettava menetelmä, tietokoneohjelma ja tietojenkäsittelyjärjestelmä | |
CN106888110A (zh) | 一种配置数据同步方法及装置 | |
DE112014001462T5 (de) | Konfigurationsverwaltung für eine Ressource mit Voraussetzungen | |
CN108846085A (zh) | 一种id生成方法、装置、电子设备及系统 | |
CN109977295A (zh) | 一种黑白名单匹配方法及装置 | |
CN106326410A (zh) | 一种数据查询方法及装置 | |
CN108268379B (zh) | 一种分布式自动化测试方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
PP01 | Preservation of patent right |
Effective date of registration: 20181115 Granted publication date: 20180703 |
|
PP01 | Preservation of patent right | ||
PD01 | Discharge of preservation of patent |
Date of cancellation: 20211115 Granted publication date: 20180703 |
|
PD01 | Discharge of preservation of patent | ||
PP01 | Preservation of patent right |
Effective date of registration: 20220309 Granted publication date: 20180703 |
|
PP01 | Preservation of patent right |