一种基于最小堆的任务超时监控系统及方法与流程

文档序号:33384424发布日期:2023-03-08 07:30阅读:36来源:国知局
一种基于最小堆的任务超时监控系统及方法与流程

1.本发明涉及任务监控技术领域,具体是一种基于最小堆的任务超时监控系统及方法。


背景技术:

2.随着大数据、人工智能以及区块链等技术的快速发展,并伴随着密集的业务相关的各类计算任务作业。计算任务作业在运行时会在一段时间内占用各类硬件及软件资源,故任务作业都需要在运行前定义好资源的占用及运行超时时间,在达到运行超时时间时任务作业将被强制进行超时终止并释放所占用的资源。在传统的做法中是在任务作业运行开始时将该任务作业组装到某种容器中如:集合(list/set)、字典(map/dict),然后在极小的时间间隔(如:1s)遍历容器中各个任务作业的超时时间来判断该任务作业是否达到超时时间并强制终止。
3.上述做法采取的方式就是基于一定时间间隔定时的检查全量正在运行中的任务作业,逐个检查超时时间,此种做法存在以下几点缺点:
4.1、无法科学的给出合理的检查时间间隔,给小了会导致增加了软硬件的额外资源消耗,给大了会导致无法精确覆盖超时时间比检查时间间隔小的任务作业。
5.2、全量遍历所有正在运行中的任务作业在任务作业越多时就越耗时,会出现本次检查还未遍历结束下一次检查间隔就已经到达,或者无法精确覆盖超时时间小的任务作业(在遍历到该任务作业时已经早就过了任务作业的超时时间)。
6.3、最近时间运行的任务作业可能会无法被及时检查到,需要等到下一次检查间隔到来。
7.4、不方便管理运行中的任务作业等等。
8.综上所述为了解决现有存在的问题,我们提出一种基于最小堆的任务超时监控系统及方法。


技术实现要素:

9.本发明的目的在于提供一种基于最小堆的任务超时监控系统及方法,基于队列实现的四叉堆及timer来实现的任务监控器,将下一个最近超时的任务信息放置堆顶并刷新timer定时为该时间,当timer定时到达时只会检查堆顶的任务信息,并自调整最小堆排序,解决基于全局遍历运行中任务作业带来的监控时间不精准问题和每次检查时的超长耗时问题。
10.为实现上述目的,本发明提供如下技术方案:一种基于最小堆的任务超时监控系统,包括:task monitor模块和与task monitor模块连接的member模块,其中所述task monitor模块内置了一个编程语言sdk自带的timer实例和装着各个运行中任务信息的member队列,且task monitor模块包括作为定时器实例以及实现最小四叉堆的成员模块、用于实现私有函数计算的私有函数模块和用于实现对外函数计算的对外函数模块。
11.作为本发明的一种优选实施方案,所述task monitor模块中的成员子模块包括:
12.timer私有成员模块,所述timer私有成员模块是一个定时器实例,且该定时器在设定完目标时间后会在目标时间达到时被激活;
13.memberqueue私有成员模块,所述memberqueue私有成员模块是由封装了任务作业信息的member组成的队列,并用来实现最小四叉堆。
14.作为本发明的一种优选实施方案,所述私有函数计算模块包括:
15.delmemberwithindex私有函数单元,用来从memberqueue中删除指定索引的member成员的函数;
16.delmember0私有函数单元,用来从memberqueue中删除堆顶member成员的函数;
17.adjustmembers私有函数单元,用来调整最小四叉堆。
18.作为本发明的一种优选实施方案,所述对外函数模块包括:
19.addmember对外函数单元,用来往memberqueue中添加新member的函数,该函数会刷新monitor的timer设定的目标定时时间并调用adjustmembers函数重新调整最小四叉堆;
20.removemember对外函数单元,用来从从memberqueue中删除指定的member成员的函数,该函数会刷新monitor的timer设定的目标定时时间并调用adjustmembers函数重新调整最小四叉堆;
21.checkmembers对外函数单元,用来检查memberqueue的最小四叉堆定的member成员是否到达超时时间的函数,该函数需要在程序启动时调用一次,后续会形成一个守护线程通过monitor的私有成员timer自行监控堆顶member成员的超时时间。
22.作为本发明的一种优选实施方案,所述member模块包括:
23.id私有成员子单元,根据一个uuid用来标识member。
24.index私有成员子单元,用来标识该member在monitor的memberqueue中的索引,在monitor调整最小堆时该值会相应更改。
25.task私有成员子单元,任务作业信息实体引用。
26.period私有成员子单元,任务定义的超时时间。
27.callback私有成员子单元,用来在该member到达超时时间时激活的回调函数。
28.一种基于最小堆的任务超时监控方法,包括如下步骤:
29.步骤s1:添加新任务;
30.步骤s2:删除新任务;
31.步骤s3:刷新timer和调整最小四叉堆;
32.步骤s4:启动monitor进行监控工作;
33.步骤s5:在代码崩溃或进程中断后,进行重启处理。
34.作为本发明的一种优选实施方案,所述步骤s1:添加新任务的详细步骤如下:
35.步骤s1.1首先通过task monitor模块调用addmember函数;
36.步骤s1.2将该member的超时时间和处于monitor的memberqueue的堆顶member的超时时间进行比较,并取离当前时间最近的超时时间的值重置monitor的timer;
37.步骤s1.3再将该member追加到memberqueue并调用adjustmembers调整最小四叉堆。
38.作为本发明的一种优选实施方案,所述步骤s2:删除新任务的详细步骤如下;
39.步骤s2.1根据member的id先找到monitor的memqueue中的member并删除;
40.步骤s2.2再调用adjustmembers重新调整最小四叉堆;
41.步骤s2.3最后获取调整后的最小四叉堆顶的member的超时时间重置monitor的timer目标时间。
42.作为本发明的一种优选实施方案,步骤s4:启动monitor进行监控工作详细步骤如下:
43.步骤s4.1程序或者进程启动时调用checkmembers启动监控器的守护线程来加载monitor的最小四叉堆顶member的超时时间,用来重置timer的标时间;
44.步骤s4.2当timer定时到达时会取出堆顶的member并判断该member是否需要执行callback函数,然后调整最小四叉堆,并再次用新的堆顶member的的超时时间,用来重置timer的时间等待下一次timer定时的到来;
45.步骤s4.3重复上述步骤。
46.作为本发明的一种优选实施方案,所述步骤s5:代码崩溃或进程中断后的重启处理中,当程序崩溃或者进程中断后,在再次启动进程时会根据wal中备份的member信息重新拉起monitor,并调用checkmembers函数进入上述步骤s4,开始正常监控工作。
47.与现有技术相比,本发明的有益效果是:
48.1、本发明能保证在高密集任务作业时做到精准的超时监控。
49.2、本发明基于队列实现最小四叉堆和编程语言sdk自带的timer来做到最需要对堆顶member进行定时检查来监控所有的任务作业超时。
50.3、只通过监控堆顶member并在每次添加member和删除member时都维护最小堆和用堆顶member的超时时间重置timer,这样的做法让我们只需要监控堆顶离当前时间最近的超时任务作业即可,从而不需要将所有的任务作业信息都遍历一遍,大大加快了监控检查耗时和做到精准的监控每一个任务作业超时时间。
附图说明
51.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
52.图1为本发明的系统结构图。
53.图2为本发明的添加任务流程图。
54.图3为本发明的删除任务流程图。
55.图4为本发明的工作原理流程图。
56.图5为本发明的代码重启备份图。
具体实施方式
57.为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
58.本发明提供一种基于最小堆的任务超时监控系统,包括:task monitor模块和与task monitor模块连接的member模块,其中所述task monitor模块内置了一个编程语言sdk自带的timer实例和装着各个运行中任务信息的member队列,且task monitor模块包括作为定时器实例以及实现最小四叉堆的成员模块、用于实现私有函数计算的私有函数模块和用于实现对外函数计算的对外函数模块。
59.进一步的,所述task monitor模块中的成员子模块包括:
60.timer私有成员模块,所述timer私有成员模块是一个定时器实例,且该定时器在设定完目标时间后会在目标时间达到时被激活;
61.memberqueue私有成员模块,所述memberqueue私有成员模块是由封装了任务作业信息的member组成的队列,并用来实现最小四叉堆。
62.进一步的,所述私有函数计算模块包括:
63.delmemberwithindex私有函数单元,用来从memberqueue中删除指定索引的member成员的函数;
64.delmember0私有函数单元,用来从memberqueue中删除堆顶member成员的函数;
65.adjustmembers私有函数单元,用来调整最小四叉堆。
66.进一步的,所述对外函数模块包括:
67.addmember对外函数单元,用来往memberqueue中添加新member的函数,该函数会刷新monitor的timer设定的目标定时时间并调用adjustmembers()函数重新调整最小四叉堆;
68.removemember对外函数单元,用来从从memberqueue中删除指定的member成员的函数,该函数会刷新monitor的timer设定的目标定时时间并调用adjustmembers函数重新调整最小四叉堆;
69.checkmembers对外函数单元,用来检查memberqueue的最小四叉堆定的member成员是否到达超时时间的函数,该函数需要在程序启动时调用一次,后续会形成一个守护线程通过monitor的私有成员timer自行监控堆顶member成员的超时时间。
70.进一步的,所述member模块包括:
71.id私有成员子单元,根据一个uuid用来标识member。
72.index私有成员子单元,用来标识该member在monitor的memberqueue中的索引,在monitor调整最小堆时该值会相应更改。
73.task私有成员子单元,任务作业信息实体引用。
74.period私有成员子单元,任务定义的超时时间。
75.callback私有成员子单元,用来在该member到达超时时间时激活的回调函数。
76.一种基于最小堆的任务超时监控方法,包括如下步骤:
77.步骤s1:添加新任务;
78.步骤s2:删除新任务;
79.步骤s3:刷新timer和调整最小四叉堆;
80.步骤s4:启动monitor进行监控工作;
81.步骤s5:在代码崩溃或进程中断后,进行重启处理。
82.进一步的,所述步骤s1:添加新任务的详细步骤如下:
83.步骤s1.1首先通过task monitor模块调用addmember函数;
84.步骤s1.2将该member的超时时间和处于monitor的memberqueue的堆顶member的超时时间进行比较,并取离当前时间最近的超时时间的值重置monitor的timer;
85.步骤s1.3再将该member追加到memberqueue并调用adjustmembers调整最小四叉堆。
86.进一步的,所述步骤s2:删除新任务的详细步骤如下;
87.步骤s2.1根据member的id先找到monitor的memqueue中的member并删除;
88.步骤s2.2再调用adjustmembers重新调整最小四叉堆;
89.步骤s2.3最后获取调整后的最小四叉堆顶的member的超时时间重置monitor的timer目标时间。
90.进一步的,步骤s4:启动monitor进行监控工作详细步骤如下:
91.步骤s4.1程序或者进程启动时调用checkmembers启动监控器的守护线程来加载monitor的最小四叉堆顶member的超时时间,用来重置timer的标时间;
92.步骤s4.2当timer定时到达时会取出堆顶的member并判断该member是否需要执行callback函数,然后调整最小四叉堆,并再次用新的堆顶member的的超时时间,用来重置timer的时间等待下一次timer定时的到来;
93.步骤s4.3重复上述步骤。
94.进一步的,所述步骤s5:代码崩溃或进程中断后的重启处理中,当程序崩溃或者进程中断后,在再次启动进程时会根据wal中备份的member信息重新拉起monitor,并调用checkmembers函数进入上述步骤s4,开始正常监控工作。
95.实施例1:请参阅图1,monitor中内置了一个编程语言sdk自带的timer实例和装着各个运行中任务信息的member队列另外,实现了delmemberwithindex、delmember0、adjustmembers等私有函数和addmember、removemember和checkmembers等对外的函数。
96.它们的功能如下:
97.timer私有成员模块,是一个定时器实例,在设定完目标时间后会在目标时间达到时被激活。
98.memberqueue私有成员模块,是由封装了任务作业信息的member组成的队列,并用来实现最小四叉堆。
99.delmemberwithindex私有函数单元,用来从memberqueue中删除指定索引的member成员的函数。
100.delmember0私有函数单元,用来从memberqueue中删除堆顶member成员的函数。
101.adjustmembers私有函数单元,用来调整最小四叉堆。
102.addmember对外函数单元,用来往memberqueue中添加新member的函数,该函数会刷新monitor的timer设定的目标定时时间并调用adjustmembers函数重新调整最小四叉堆。
103.removemember对外函数单元,用来从从memberqueue中删除指定的member成员的函数,该函数会刷新monitor的timer设定的目标定时时间并调用adjustmembers函数重新调整最小四叉堆。
104.checkmembers对外函数单元,用来检查memberqueue的最小四叉堆定的member成
员是否到达超时时间的函数,该函数需要在程序启动时调用一次,后续会形成一个守护线程通过monitor的私有成员timer自行监控堆顶member成员的超时时间。
105.而,member中的成员有:
106.id私有成员子单元,根据一个uuid用来标识member。
107.index私有成员子单元,用来标识该member在monitor的memberqueue中的索引,在monitor调整最小堆时该值会相应更改。
108.task私有成员子单元,任务作业信息实体引用。
109.period私有成员子单元,任务定义的超时时间。
110.callback私有成员子单元,用来在该member到达超时时间时激活的回调函数。
111.实施例2:请参阅图2-5,一种基于最小堆的任务超时监控方法,包括如下步骤:
112.步骤s1:添加新任务,请参阅图2,在本实施例中将任务作业封装成member实例,在调用addmember函数后,将该member的超时时间和处于monitor的memberqueue的堆顶member的超时时间进行比较,并取离当前时间最近的超时时间的值重置monitor的timer,再将该member追加到memberqueue并调用adjustmembers调整最小四叉堆;
113.步骤s2:删除新任务,请参阅图3,根据member的id先找到monitor的memqueue中的member并删除,再调用adjustmembers重新调整最小四叉堆,最后获取调整后的最小四叉堆顶的member的超时时间重置monitor的timer目标时间;
114.步骤s3:刷新timer和调整最小四叉堆,请参阅图2-图3,添加member和删除member都需要调整堆并根据最小四叉堆顶的member的超时时间去刷新timer的目标超时时间;
115.步骤s4:启动monitor进行监控工作,请参阅图4,在程序或者进程启动时会去调用checkmembers启动监控器的守护线程来加载monitor的最小四叉堆顶member的超时时间,用来重置timer的标时间,当timer定时到达时会取出堆顶的member并判断该member是否需要执行callback函数,然后调整最小四叉堆,并再次用新的堆顶member的的超时时间,用来重置timer的时间等待下一次timer定时的到来,这样周而复始的运行下去,做到了只用timer监控单个堆顶member从而简化了传统的将所有任务作业都遍历一遍检查超时时间带来的监控不精准和巨大耗时;
116.步骤s5:在代码崩溃或进程中断后,进行重启处理,请参阅图5,上述每一次操作monitor(增加member和删除member)都会记录对应的wal(写前日志,业内做数据恢复的常规做法,这里不多做赘述),当程序崩溃或者进程中断后,在再次启动进程时会根据wal中备份的member信息重新拉起monitor,并调用checkmembers()函数进入上述步骤s4,开始正常监控工作。
117.示例性的,处理器从存储器中逐条取出指令、分析指令,然后根据指令要求完成相应操作,产生一系列控制命令,使计算机各部分自动、连续并协调动作,成为一个有机的整体,实现程序的输入、数据的输入以及运算并输出结果,这一过程中产生的算术运算或逻辑运算均由运算器完成;所述存储器包括只读存储器(read-only memory,rom),所述只读存储器用于存储计算机程序,所述存储器外部设有保护装置。
118.示例性的,计算机程序可以被分割成一个或多个模块,一个或者多个模块被存储在存储器中,并由处理器执行,以完成本发明。一个或多个模块可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述计算机程序在终端设备中的执行过程。
119.本领域技术人员可以理解,上述服务设备的描述仅仅是示例,并不构成对终端设备的限定,可以包括比上述描述更多或更少的部件,或者组合某些部件,或者不同的部件,例如可以包括输入输出设备、网络接入设备、总线等。
120.所称处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,上述处理器是上述终端设备的控制中心,利用各种接口和线路连接整个用户终端的各个部分。
121.上述存储器可用于存储计算机程序和/或模块,上述处理器通过运行或执行存储在存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现上述终端设备的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如信息采集模板展示功能、产品信息发布功能等)等;存储数据区可存储根据泊位状态显示系统的使用所创建的数据(比如不同产品种类对应的产品信息采集模板、不同产品提供方需要发布的产品信息等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
122.终端设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例系统中的全部或部分模块/单元,也可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个系统实施例的功能。其中,计算机程序包括计算机程序代码,计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。
123.需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
124.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1