CN107870812B - 一种基于单线程并发多定时器应用管理方法 - Google Patents
一种基于单线程并发多定时器应用管理方法 Download PDFInfo
- Publication number
- CN107870812B CN107870812B CN201711145973.4A CN201711145973A CN107870812B CN 107870812 B CN107870812 B CN 107870812B CN 201711145973 A CN201711145973 A CN 201711145973A CN 107870812 B CN107870812 B CN 107870812B
- Authority
- CN
- China
- Prior art keywords
- time
- sequence
- timer
- slice
- waiting
- 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
Images
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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Factory Administration (AREA)
- Programmable Controllers (AREA)
Abstract
本发明提出了一种非均等的可变时间片单元定时器管理方法,同样是单线程处理多定时器的需求,可以大大提高效率。本发明的基于单线程并发多定时器应用管理方法,使用可变时间片单元定时器进行管理,其特征在于:使用一个时间片序列Sequencet来存放每次循环检测等待的时间间隔,对于Sequencet中每一个等待时间ti,都对应一个或多个定时器满足时间件,直到Sequencet中所有时间片走完,定时器管理单元停止工作,让出系统资源,直到有新的时间片值加入Sequencet中。
Description
技术领域
本发明涉及工业自动化应用软件领域,具体而言,涉及一种基于单线程并发多定时器应用管理方法。
背景技术
在工业自动化应用软件领域,定时器是必不可少的功能模块之一,其效率和准确性直接决定了相关应用软件的性能和可靠性。
工业通讯规约中,有各种定时器应用需求,比如定时召唤数据、数据发送后的对端的确认超时,控制命令的反馈超时等等,往往单个应用程序就有多个定时器需求。如果按照惯例,直接利用操作系统或硬件实现多个定时器的功能,不仅受到诸多限制,而且浪费资源。
目前常规单线程的定时器方法类似于操作系统对于进程的时间片分配设计,将定时器线程均分成N等分,每一等分为一个最小的时间片单元,每隔一个时间片单元就检测一次,看定时器列表中是否有定时器满足时间要求被激活,如有则触发该定时器激活处理函数,并将该定时器排除出定时器列表中,如果没有则继续,到下一个时间单元之后再检测,如此无限循环,直到等待激活的定时器列表为空为止。为了保证定时器的准确性,该设计的时间片单元需要定义的足够小,才能保证误差在允许范围内,但时间片单元太小,检测执行次数就会相应增加,甚至可能大部分检测时都没有定时器满足时间条件,浪费了CPU和线程资源。
发明内容
针对现有技术中存在的问题,本发明提出了一种可实现多个定时器管理控制的单线程设计方案,该设计具有非常好的灵活性和执行效率。
为了实现上述发明目的,本发明采用的技术方案为:一种基于单线程并发多定时器应用管理方法,使用可变时间片单元定时器进行管理,其特征在于:使用一个时间片序列Sequencet来存放每次循环检测等待的时间间隔,对于Sequencet中每一个等待时间ti,都对应一个或多个定时器满足时间件,直到Sequencet中所有时间片走完,定时器管理单元停止工作,让出系统资源,直到有新的时间片值加入Sequencet中。
假设某一时刻T1系统中有多个等待返回结果的命令,其剩余等待时间分别对应是t1、t2、t3…,则Sequencet中依次存放多个时间长度{t1,t2-t1,t3-t2,t4-t3,…},Sequencet的每一个元素对应一个命令;
从T1时刻走到T2时刻(Wait t1),定时器管理模块取得超时命令C1,执行C1.TimeoutHandler,此时时间片序列Sequencet中还剩下其余时间片值{t2-t1,t3-t2,t4-t3,…}
从T2时刻走到T3时刻(Wait t2-t1),定时器管理模块取得超时命令C2,执行C2.TimeoutHandler,此时Sequencet中还剩下{t3-t2,t4-t3,…}
接着等待从T3时刻走到T4时刻(Wait t3-t2),定时器管理模块取得超时命令C3,处理C3.TimeoutHandler,此时Sequencet中还剩下{t4-t3,…}
依次类推;
直至Sequencet为空,定时器管理模块停止工作,等待新的时间片被加入到Sequencet中。
T1时刻,系统控制命令Cn被下达,其控制等待时间为tn;Cn开始计时后,需要将tn加入Sequencet统一管理,首先比较tn与t1的大小,如果tn<t1,则tn代替t1成为Sequencet新的首元素,Sequencet变为{tn,t1-tn,t2-t1,t3-t2,…},定时器管理单元重新开始工作,首先读取tn作为等待时间片,等tn时间到后,先处理Cn.TimeoutHandler,然后是t1-tn…;如果tn>t1,则比较tn-t1与t2-t1的大小,如果tn-t1<=t2-t1,则在T2时间点前插入Tn时间点,Sequencet变为{t1,tn-t1,t2-tn,t3-t2},如果tn-t1>t2-t1,则继续比较tn-t2与t3-t2的大小,…,依次类推,将Tn插入到合适的位置上,保证Sequencet按照正确的时间顺序执行。
当某个控制命令Cn在等待返回时间内收到了控制反馈结果,则定时需要及时取消,也就是需要把关于该命令的时间片从序列中删除,先遍历时间片序列Sequencet,找到对应的时间片元素,删除它,将后续时间片往前移一位,并加上删除的时间值。
有益效果:
本发明提出了一种非均等的可变时间片单元定时器管理方法,同样是单线程处理多定时器的需求,可以大大提高效率。
本发明使用的时间片序列与激活待反馈的命令一一对应,每等待一个时间片后保证序列排在第一位的时间元素对应的命令满足了定时器时间要求,这种设计就类似一个以时间长短为优先级的优先级队列,越短时间优先级越高,优先级最高的定时器被最先处理,依次类推,高效且精确。
附图说明
图1为现有技术的单计时器工作流程图。
图2为本发明的等长时间片定时器检测法原理图。
图3为本发明的可变时间片定时器管理示意图。
具体实施方式
以下结合附图和具体实施例对本发明作进一步详细说明。
定时器主要关注三要素:定时触发点(开始计时)、定时时长以及定时器(超时)激活处理。为了更好的阐述本实施例,这里以工业自动化中遥控命令为例,详细描述单线程多定时器应用的管理过程。
单定时器
工业控制中管理在控制中心通过客户端界面下遥控命令,等待结果返回,为了防止通讯中断或者设备故障等系统无法响应的情况发生,就需要为该遥控命令设置一个最大的等待时间,超过这个时间,依然无结果返回,则可以终止等待,给出失败的结果或是报警,反之,如果在该时间内收到了终端执行设备的返回结果,则中止计时。这是一个非常常见的定时器需求,在启动命令的同时,启动该命令计时器,等待返回结果或者进入超时处理。
图1为单计时器工作流程图。
当控制命令下发后,
主工作线程启动计时,等待命令结果返回:
If Commandcurrent.GetFeedbackthen
Commandcurrent.StopTimer
End
定时器管理线程负责检查定时器是否超时:
多定时器并发
很显然,工业控制中多命令并发才是常态,每个命令对应自己的定时时长,这种情况涉及到多线程(至少有主线程和定时器管理线程)和多命令(不同定时时长)并发,通常的解决办法是本申请所述提到等长时间片定时器检测法。
等长时间片定时器检测法原理如图2所示:等长时间片定时器检测法原理图。
定时器管理线程每隔定长时间间隔循环检测是否有定时器满足时间要求,t1、t3…
伪代码如下:
此种设计的缺陷就在定长时间片的选择上,FIXED_INTERVAL如果选择的过大,可能造成定时器超时却没有及时处理定时超时,如果选择的太小,又会增加循环检测次数,增加空检测(没有定时器超时)的概率,浪费系统资源。
可变时间片单元定时器管理方法可以很好的解决这个问题。使用一个时间片序列Sequencet来存放每次循环检测等待的时间间隔。对于Sequencet中每一个等待时间ti,都对应一个或多个定时器满足时间件,直到Sequencet中所有时间片走完,定时器管理单元停止工作,让出系统资源,直到有新的时间片值加入Sequencet中。
伪代码如下:
假设某一时刻T1系统中有三个等待返回结果的命令,C1、C2和C3,其剩余等待时间分别是t1、t2和t3,则Sequencet中依次存放三个时间长度{t1,t2-t1,t3-t2},Sequencet的每一个元素对应一个命令,对应如图3所示:可变时间片定时器管理示意图。
正常定时管理
此时定时管理的模式如下:
从T1时刻走到T2时刻(Wait t1),定时器管理模块取得超时命令C1,执行C1.TimeoutHandler,此时时间片序列Sequencet中还剩下两个时间片值{t2-t1,t3-t2}
从T2时刻走到T3时刻(Wait t2-t1),定时器管理模块取得超时命令C2,执行C2.TimeoutHandler,此时Sequencet中还剩下{t3-t2}
接着等待从T3时刻走到T4时刻(Wait t3-t2),定时器管理模块取得超时命令C3,处理C3.TimeoutHandler。
此时Sequencet为空,定时器管理模块停止工作,等待新的时间片被加入到Sequencet中。
添加某个定时
T1时刻,系统控制命令Cn被下达,其控制等待时间为tn。Cn开始计时后,需要将tn加入Sequencet统一管理,首先比较tn与t1的大小,如果tn<t1,则tn代替t1成为Sequencet新的首元素,Sequencet变为{tn,t1-tn,t2-t1,t3-t2},定时器管理单元重新开始工作,首先读取tn作为等待时间片,等tn时间到后,先处理Cn.TimeoutHandler,然后是t1-tn…;如果tn>t1,则比较tn-t1与t2-t1的大小,如果tn-t1<=t2-t1,则在T2时间点前插入Tn时间点,Sequencet变为{t1,tn-t1,t2-tn,t3-t2},如果tn-t1>t2-t1,则继续比较tn-t2与t3-t2的大小,…,依次类推,将Tn插入到合适的位置上,保证Sequencet按照正确的时间顺序执行。
伪代码如下:
删除某个定时
当某个控制命令Cn在等待返回时间内收到了控制反馈结果,则定时需要及时取消,也就是需要把关于该命令的时间片从序列中删除,先遍历时间片序列Sequencet,找到对应的时间片元素,删除它,将后续时间片往前移一位,并加上删除的时间值。
伪代码如下:
虽然在说明书中以工业控制命令为例,但本发明绝不仅限于此,所有正常并发定时器的应用均可使用,应用范围广泛没有限制。
另外,本设计中时间序列Sequencet涉及到多线程并发操作,在设计代码时需要合理使用线程互斥量Mutex和内存临界区。
Claims (3)
1.一种基于单线程并发多定时器应用管理方法,使用可变时间片单元定时器进行管理,使用一个时间片序列Sequencet来存放每次循环检测等待的时间间隔,对于Sequencet中每一个等待时间ti,都对应一个或多个定时器满足时间条件,直到Sequencet中所有时间片走完,定时器管理单元停止工作,让出系统资源,直到有新的时间片值加入Sequencet中;其特征在于:
某一时刻T1系统中有多个等待返回结果的命令,其剩余等待时间分别对应是t1、t2、t3…,则Sequencet中依次存放多个时间长度{t1,t2-t1,t3-t2,t4-t3,…},Sequencet的每一个元素对应一个命令;
从T1时刻走到T2时刻Wait t1,定时器管理模块取得超时命令C1,执行C1.TimeoutHandler,此时时间片序列Sequencet中还剩下其余时间片值{t2-t1,t3-t2,t4-t3,…}
从T2时刻走到T3时刻Wait t2-t1,定时器管理模块取得超时命令C2,执行C2.TimeoutHandler,此时Sequencet中还剩下{t3-t2,t4-t3,…}
接着等待从T3时刻走到T4时刻Wait t3-t2,定时器管理模块取得超时命令C3,处理C3.TimeoutHandler,此时Sequencet中还剩下{t4-t3,…}
依次类推;
直至Sequencet为空,定时器管理模块停止工作,等待新的时间片被加入到Sequencet中。
2.根据权利要求1所述的基于单线程并发多定时器应用管理方法,其特征在于:
T1时刻,系统控制命令Cn被下达,其控制等待时间为tn;Cn开始计时后,需要将tn加入Sequencet统一管理,首先比较tn与t1的大小,如果tn<t1,则tn代替t1成为Sequencet新的首元素,Sequencet变为{tn,t1-tn,t2-t1,t3-t2,…},定时器管理单元重新开始工作,首先读取tn作为等待时间片,等tn时间到后,先处理Cn.TimeoutHandler,然后是t1-tn…;如果tn>t1,则比较tn-t1与t2-t1的大小,如果tn-t1<=t2-t1,则在T2时间点前插入Tn时间点,Sequencet变为{t1,tn-t1,t2-tn,t3-t2},如果tn-t1>t2-t1,则继续比较tn-t2与t3-t2的大小,…,依次类推,将Tn插入到合适的位置上,保证Sequencet按照正确的时间顺序执行。
3.根据权利要求1所述的基于单线程并发多定时器应用管理方法,其特征在于:
当某个控制命令Cn在等待返回时间内收到了控制反馈结果,则定时需要及时取消,也就是需要把关于该命令的时间片从序列中删除,先遍历时间片序列Sequencet,找到对应的时间片元素,删除它,将后续时间片往前移一位,并加上删除的时间值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711145973.4A CN107870812B (zh) | 2017-11-17 | 2017-11-17 | 一种基于单线程并发多定时器应用管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711145973.4A CN107870812B (zh) | 2017-11-17 | 2017-11-17 | 一种基于单线程并发多定时器应用管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107870812A CN107870812A (zh) | 2018-04-03 |
CN107870812B true CN107870812B (zh) | 2021-06-15 |
Family
ID=61754057
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711145973.4A Active CN107870812B (zh) | 2017-11-17 | 2017-11-17 | 一种基于单线程并发多定时器应用管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107870812B (zh) |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0558106A2 (en) * | 1988-04-18 | 1993-09-01 | BRUNSWICK BOWLING & BILLIARDS CORPORATION | Operating method for a processing system under control of a multi-tasking time slice operating system |
CN1870767A (zh) * | 2005-12-14 | 2006-11-29 | 华为技术有限公司 | 对定时器任务进行管理的方法 |
CN101266553A (zh) * | 2008-05-06 | 2008-09-17 | 无锡紫芯集成电路系统有限公司 | 基于嵌入式系统的多任务管理方法 |
CN102207888A (zh) * | 2011-05-09 | 2011-10-05 | 大唐移动通信设备有限公司 | 定时器管理方法和装置 |
CN103019805A (zh) * | 2011-09-20 | 2013-04-03 | 佳都新太科技股份有限公司 | 一种多线程环境下定时器的设置方法 |
CN103885825A (zh) * | 2014-03-05 | 2014-06-25 | 南京邮电大学 | 基于动态时间片的速率单调实时调度方法 |
CN104035786A (zh) * | 2014-07-01 | 2014-09-10 | 上海斐讯数据通信技术有限公司 | 一种软件定时器的优化方法及系统 |
CN104391732A (zh) * | 2014-11-20 | 2015-03-04 | 中国船舶重工集团公司第七二六研究所 | 软件多定时器动态管理方法 |
CN104951282A (zh) * | 2015-05-21 | 2015-09-30 | 中国人民解放军理工大学 | 一种定时器管理系统及方法 |
CN105824769A (zh) * | 2016-03-14 | 2016-08-03 | 合肥工业大学 | 一种可配置的动态时间片轮转调度算法 |
CN106844250A (zh) * | 2017-02-14 | 2017-06-13 | 山东师范大学 | 一种混合调度的总线仲裁器和仲裁方法 |
CN109684056A (zh) * | 2018-12-07 | 2019-04-26 | 咪咕文化科技有限公司 | 一种定时器实现方法及装置、调度器、存储介质 |
-
2017
- 2017-11-17 CN CN201711145973.4A patent/CN107870812B/zh active Active
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0558106A2 (en) * | 1988-04-18 | 1993-09-01 | BRUNSWICK BOWLING & BILLIARDS CORPORATION | Operating method for a processing system under control of a multi-tasking time slice operating system |
CN1870767A (zh) * | 2005-12-14 | 2006-11-29 | 华为技术有限公司 | 对定时器任务进行管理的方法 |
CN101266553A (zh) * | 2008-05-06 | 2008-09-17 | 无锡紫芯集成电路系统有限公司 | 基于嵌入式系统的多任务管理方法 |
CN102207888A (zh) * | 2011-05-09 | 2011-10-05 | 大唐移动通信设备有限公司 | 定时器管理方法和装置 |
CN103019805A (zh) * | 2011-09-20 | 2013-04-03 | 佳都新太科技股份有限公司 | 一种多线程环境下定时器的设置方法 |
CN103885825A (zh) * | 2014-03-05 | 2014-06-25 | 南京邮电大学 | 基于动态时间片的速率单调实时调度方法 |
CN104035786A (zh) * | 2014-07-01 | 2014-09-10 | 上海斐讯数据通信技术有限公司 | 一种软件定时器的优化方法及系统 |
CN104391732A (zh) * | 2014-11-20 | 2015-03-04 | 中国船舶重工集团公司第七二六研究所 | 软件多定时器动态管理方法 |
CN104951282A (zh) * | 2015-05-21 | 2015-09-30 | 中国人民解放军理工大学 | 一种定时器管理系统及方法 |
CN105824769A (zh) * | 2016-03-14 | 2016-08-03 | 合肥工业大学 | 一种可配置的动态时间片轮转调度算法 |
CN106844250A (zh) * | 2017-02-14 | 2017-06-13 | 山东师范大学 | 一种混合调度的总线仲裁器和仲裁方法 |
CN109684056A (zh) * | 2018-12-07 | 2019-04-26 | 咪咕文化科技有限公司 | 一种定时器实现方法及装置、调度器、存储介质 |
Non-Patent Citations (1)
Title |
---|
Modified Round Robin Scheduling Algorithm Using Variable Time Slice;Suman Bhatia 等;《International Journal of Engineering Research and Development》;20130831;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN107870812A (zh) | 2018-04-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107392611B (zh) | 一种发送交易信息和共识验证的方法及装置 | |
CN102455940B (zh) | 一种定时器和异步事件的处理方法及系统 | |
CN107491346B (zh) | 一种应用的任务处理方法、装置及系统 | |
CN113179227B (zh) | 基于队列的at指令控制方法 | |
US9141439B2 (en) | System and method for reporting a synchronization event in a runtime system of a computer system | |
CN110597695A (zh) | 报警方法、装置、计算机设备和可读存储介质 | |
CN112214291A (zh) | 一种任务调度方法及装置 | |
CN107562597A (zh) | 一种多进程监测方法、装置及服务系统 | |
CN107870812B (zh) | 一种基于单线程并发多定时器应用管理方法 | |
CN108292236B (zh) | 一种信息处理方法及装置 | |
CN107301125B (zh) | 一种寻找根源错误的方法、装置及电子设备 | |
CN105550028A (zh) | 一种基于缓存锁的多任务时序执行方法及系统 | |
CN111026526B (zh) | 程序的定时器配置方法、装置、存储介质及终端设备 | |
CN110865877B (zh) | 一种任务请求的响应方法及设备 | |
CN112698962A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN116521573A (zh) | 一种自动化测试方法、装置、设备及存储介质 | |
CN110688211A (zh) | 一种分布式作业调度方法 | |
CN113032128B (zh) | 一种多任务的控制方法、装置、电子设备及存储介质 | |
CN105939217B (zh) | 配置回滚的方法及装置 | |
CN110673937B (zh) | 单片机及其同步异步控制方法 | |
CN104360913B (zh) | 用于计算机操作系统的监控模块 | |
CN114443532A (zh) | 一种总线控制方法、装置、车辆、存储介质 | |
CN113704355A (zh) | 数据同步方法、电子设备及存储介质 | |
CN102096604B (zh) | 阅读器及其ro规则调度方法 | |
KR102552666B1 (ko) | 전자 장치 및 그것의 동작 방법 |
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 |