任务执行方法、存储介质以及计算机设备与流程

文档序号:12915802阅读:205来源:国知局
任务执行方法、存储介质以及计算机设备与流程

本发明涉及计算机技术领域,特别是涉及一种任务执行方法、存储介质以及计算机设备。



背景技术:

众所周知,优先级队列(priorityqueue)是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有查找、插入一个新元素以及删除,一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素。对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行。

然而,在医疗影像系统中,有很多非常耗资源的任务,这些任务会长时间、满带宽地执行。在执行某一个这样的任务时,显卡带宽会立即耗尽,并且无法同时运行另外一个长时间、耗资源的任务。这个时候,如果使用传统的优先级队列的话,因为通常都遵循高优先级先调度,低优先级后调度的原则,所以,如果任务队列中不停地有新的优先级较高的任务进入队列,则会导致已经有的低优先级任务永远无法得到调度。



技术实现要素:

基于此,有必要针对采用传统的优先级队列使得低优先级任务无法得到执行的问题,提供一种任务执行方法、存储介质以及计算机设备。

一种任务执行方法,包括:

将待执行任务分解为多个子任务,并组成子任务队列;

获取多个子任务队列的注册请求,所述注册请求中包括多个子任务队列的优先级、最大衰减执行时间;

根据优先级和最大衰减执行时间执行多个子任务队列中的子任务。

在其中一个实施例中,将待执行任务分解为多个子任务包括:将待执行任务分解为多个执行粒度相同的子任务,其中,执行粒度相同包括执行时间相同以及占用资源相同。

在其中一个实施例中,根据优先级和最大衰减执行时间执行各子任务队列中的子任务,包括:

a、根据优先级按高到低依次执行各子任务队列中的子任务,并记录子任务的执行时间;

b、若执行的当前子任务队列中已执行子任务的执行总时间大于当前子任务队列的最大衰减执行时间或当前执行子任务队列中的子任务已执行完毕,则停止执行当前子任务队列中的子任务;

c、调度执行下一优先级子任务队列中的子任务,并记录子任务的执行时间;

d、返回执行步骤b、c,直到完成对最低优先级子任务队列中的子任务的调度;

e、根据优先级按高到低返回依次执行各子任务队列中的未执行子任务,并记录子任务的执行时间;

f、返回执行步骤b、c、d、e,直到完成各子任务队列中的所有子任务的执行。

在其中一个实施例中,注册请求中还包括各子任务队列的标识、与标识对应的子任务队列的最大期望执行时间以及与标识对应的子任务队列中每个子任务的期望执行时间,所述任务执行方法还包括:

获取临时任务加入指定子任务队列的加入请求,其中,加入请求中包括临时任务加入指定子任务队列的标识以及临时任务的期望执行时间;

根据与标识对应的指定子任务队列中每个子任务的期望执行时间和临时任务的期望执行时间确定指定子任务队列的总期望执行时间;

若指定子任务队列的总期望执行时间大于指定子任务队列的最大期望执行时间,则拒绝临时任务加入指定子任务队列的加入请求。

在其中一个实施例中,该方法还包括:

若指定子任务队列的总期望执行时间小于指定子任务队列的最大期望执行时间,则将临时任务加入指定子任务队列。

在其中一个实施例中,根据与标识对应的指定子任务队列中每个子任务的期望执行时间和临时任务的期望执行时间确定指定子任务队列的总期望执行时间,包括:

根据标识确定对应的指定子任务队列中的未执行子任务;

根据标识对应的指定子任务队列中每个子任务的期望执行时间和未执行子任务,确定标识对应的指定子任务队列中未执行子任务的总期望执行时间;

根据标识对应的指定子任务队列中未执行子任务的总期望执行时间和临时任务的期望执行时间确定指定子任务队列的总期望执行时间。

在其中一个实施例中,该方法还包括:

获取紧急任务执行请求;

所述根据优先级和最大衰减执行时间执行各子任务队列中的子任务,包括::

执行完当前正在执行的子任务后,执行紧急任务;

若紧急任务执行完毕,则根据优先级和最大衰减执行时间返回执行当前正在执行的子任务的下一子任务。

一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上方法的步骤。

一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现如上方法的步骤。

上述任务执行方法、存储介质以及计算机设备,通过将待执行任务分解为多个执行粒度相同的子任务,并组成子任务队列,然后根据各子任务队列的优先级和最大衰减执行时间执行各子任务队列中的子任务,从而实现对调度资源消耗大、执行时间长的大型任务的执行,避免了采用传统的优先级队列使得此类任务无法得到执行的问题。

附图说明

图1为一个实施例中任务执行方法的流程示意图;

图2为一个实施例中任务执行方法的流程示意图;

图3为一个实施例中任务执行方法的流程示意图;

图4为一个实施例中任务执行方法的流程示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。

本发明实施例提供了一种任务执行方法,如图1所示,可以包括如下步骤::

步骤s101,将待执行任务分解为多个执行粒度相同的子任务,并组成子任务队列。

本实施例主要应用于调度资源消耗大、执行时间长的大型任务,其中,调度资源包括但不限于cpu、gpu等资源。在本实施例中,此类大型任务还具有可分割性,且分割后的任务没有执行先后顺序的依赖要求。

因此,在调度执行此类大型任务之前,可以先将每个大型任务即待执行任务分别分解为由多个执行粒度相同的子任务组成的子任务队列。在本实施例中,执行粒度相同包括执行时间相同以及占用资源相同等,即对一个待执行任务进行分解后的各子任务的执行时间以及占用资源均相同。

步骤s102,获取多个子任务队列的注册请求,其中,注册请求中包括多个子任务队列的优先级、最大衰减执行时间。

获取每个子任务队列发送的注册请求,注册请求中包括各子任务队列的优先级、最大衰减执行时间。其中,各子任务队列的优先级用于表示各子任务队列的优先级别关系,从而可以根据各子任务队列的优先级从高到低构建优先级队列,即子任务队列的优先级高的排在优先级队列的前面,优先级低的排在优先级队列的后面。

最大衰减执行时间则用于控制对应的子任务队列在持续执行一定时间后停止执行,并根据优先级启动下一级子任务队列执行,从而避免传统的优先级队列仅遵循高优先级先调度、低优先级后调度的原则,而导致优先级低的子任务队列无法得到调度的问题。

步骤s103,根据优先级和最大衰减执行时间执行多个子任务队列中的子任务。

在本实施例中,根据优先级和最大衰减执行时间执行多个子任务队列中的子任务,即根据构建的优先级队列的优先级顺序以及各子任务队列的最大衰减执行时间执行各子任务队列中的子任务。当执行某一优先级子任务队列中子任务的执行时间超出该一级子任务队列的最大衰减执行时间时,或者该一级子任务队列中的全部子任务都执行完毕,则暂停执行该一级子任务队列中的子任务,并调度执行下一优先级子任务队列中的子任务,以此类推,按优先级顺序循环执行各子任务队列中的子任务,直到完成优先级队列中所有子任务队列中子任务的执行。

本发明实施例通过将待执行任务分解为由多个执行粒度相同的子任务组成的子任务队列,并为子任务队列设置最大衰减执行时间,从而实现对调度资源消耗大、执行时间长的大型任务的执行,避免了采用传统的优先级队列使得此类任务无法得到调度执行的问题。

在一个实施例中,执行粒度相同包括执行时间相同以及占用资源相同等,因此,将待执行任务分解为多个执行粒度相同的子任务,具体可以包括:根据资源占用以及执行时间将待执行任务分解为多个执行时间相同以及占用资源相同的子任务,例如,可以将待执行任务分解为多个执行时需要占满资源且执行时间相同的子任务。

在一个实施例中,如图2所示,根据优先级和最大衰减执行时间执行多个子任务队列中的子任务,包括:

步骤s201,根据优先级按高到低依次执行各子任务队列中的子任务,并记录子任务的执行时间。

举例来说,当有多个大型任务即待执行任务taska、taskb以及taskc需要并发执行时,则可以根据上述方法将每个待执行任务taska、taskb以及taskc分别分解为多个子任务,如待执行任务taska可以分解为{ta1,ta2,ta3...},待执行任务taskb可以分解为{tb1,tb2,tb3…},待执行任务taskc可以分解为{tc1,tc2,tc3…},其中,待执行任务taska、taskb以及taskc具体可以是在医学影像系统中需要使用gpu资源进行绘制的任务或使用gpu进行高性能并行计算的任务,{ta1,ta2,ta3...}为一个子任务队列,该队列中的每个子任务ta1,ta2,ta3……都具有在执行时需要占满资源且执行时间相同的特点。

在任务启动前,可以获取各子任务队列的注册请求,注册请求中可以包括各子任务队列的优先级和最大衰减执行时间,例如,在本实施例中,假设待执行任务taska、taskb以及taskc在注册时其优先级为taska>taskb>taskc,taska的最大衰减执行时间为t1,taskb的最大衰减执行时间为t2,taskc的最大衰减执行时间为t3。则可以根据此优先级从高到低构建优先级队列gpuqueue,该优先级队列gpuqueue中可以包括如下多个子任务队列:

gpuqueueprioritya

gpuqueuepriorityb

gpuqueuepriorityc

其中,gpuqueueprioritya为待执行任务taska的子任务队列{ta1,ta2,ta3...},其优先级最高,gpuqueuepriorityb为待执行任务taskb的子任务队列{tb1,tb2,tb3…},其优先级仅次于gpuqueueprioritya,gpuqueuepriorityc为待执行任务taskc的子任务队列{tc1,tc2,tc3…},其优先级最低。

从而在任务执行时,则可以根据优先级的按高到低依次执行优先级子任务队列中的子任务,在实施例中,由于gpuqueueprioritya的优先级最高,因此,可以最先执行gpuqueueprioritya中的子任务{ta1,ta2,ta3...},并记录子任务的执行时间。

步骤s202,判断执行的当前子任务队列中已执行子任务的执行总时间是否大于当前子任务队列的最大衰减执行时间或当前执行子任务队列中的子任务是否执行完毕,若是则执行步骤s203,否则执行步骤s204。

该一级子任务队列的总执行时间超出最大衰减执行时间或者该一级子任务队列中的子任务全部执行完毕时,则暂停执行该子任务队列中的子任务,并开始调度执行下一级子任务队列中的子任务。例如,当执行gpuqueueprioritya中的子任务ta1耗时te1,则判断te1与该队列的最大衰减执行时间t1的大小,如果te1大于t1,则暂停执行gpuqueueprioritya中的子任务,并调度执行gpuqueuepriorityb中的子任务,如果te1小于t1,则继续执行gpuqueueprioritya中的其他子任务。

以此类推,如执行总时间超出该子任务队列的最大衰减执行时间以后或者该一级子任务队列中的所有子任务都执行完毕,其执行总时间都没有达该队列的最大衰减执行时间,则可以调度执行下一级子任务队列。

步骤s203,调度执行下一优先级子任务队列中的子任务,并记录子任务的执行时间,直到该子任务队列中已执行子任务的执行总时间大于该子任务队列的最大衰减执行时间或该执行子任务队列中的子任务已执行完毕。

步骤s204,继续执行当前子任务队列中的未执行子任务,直到当前子任务队列中已执行子任务的执行总时间大于当前子任务队列的最大衰减执行时间或当前执行子任务队列中的子任务已执行完毕,则返回步骤s203。

步骤s205,判断该下一优先级子任务队列是否为最低优先级子任务队列,若是则执行步骤s206,否则返回执行步骤s203。

如果执行完毕最低一级优先级的子任务队列中的子任务或者执行该最低优先级子任务队列的执行总时间超出该子任务队列的最大衰减执行时间,则再次返回,重新开始调度执行最高优先级的子任务队列中的未执行子任务。

步骤s206,根据优先级按高到低返回依次执行各子任务队列中的未执行子任务,并记录子任务的执行时间,返回执行步骤s202。

重复上述步骤根据各子任务队列的最大衰减执行时间以及优先级关系继续执行各子任务队列中的未执行子任务,直到完成所有子任务队列中子任务的执行。从而避免了采用传统的优先级队列使得此类大型任务无法得到执行的问题,以实现对调度资源消耗大、执行时间长的大型任务的执行。

步骤s207,判断是否完成各子任务队列中的所有子任务的执行,若是则执行步骤s208,否则返回执行步骤s203。

步骤s208,结束流程。

在一个实施例中,如图3所示,子任务队列的注册请求中还可以包括各子任务队列的标识、与标识对应的子任务队列的最大期望执行时间以及与标识对应的子任务队列中每个子任务的期望执行时间,因此,该任务执行方法还可以包括如下步骤:

步骤s301,获取临时任务加入指定子任务队列的加入请求,其中,加入请求中包括临时任务加入指定子任务队列的标识以及临时任务的期望执行时间。

在一个实施例中,当有一个临时任务想要加入优先级队列中指定的某个子任务队列时,则可以发送加入请求,加入请求中可以携带该临时任务需要加入的指定子任务队列的标识以及该临时任务的期望执行时间。

步骤s302,根据与标识对应的指定子任务队列中每个子任务的期望执行时间和临时任务的期望执行时间确定该指定子任务队列的总期望执行时间。

在本实施例中,可以根据加入请求中临时任务需要加入的指定子任务队列的标识而确定与该标识对应的指定子任务对列,进而确定该指定子任务队列中的未执行子任务,并根据该指定子任务队列中每个子任务的期望执行时间,确定未执行子任务的总期望执行时间。具体的,未执行子任务的总期望执行时间可以是每个未执行子任务对应的期望执行时间之和。

进一步根据该指定子任务队列中未执行子任务的总期望执行时间和临时任务的期望执行时间确定指定子任务队列的总期望执行时间。具体的,该指定子任务队列的总期望执行时间可以是未执行子任务的总期望执行时间与临时任务的期望执行时间之和。

步骤s303,判断指定子任务队列的总期望执行时间是否大于指定子任务队列的最大期望执行时间,若是,则执行步骤s304,否则执行步骤s305。

步骤s304,拒绝临时任务加入指定子任务队列的加入请求。

步骤s305,将临时任务加入指定子任务队列。

在本实施例中,根据上述步骤确定该指定子任务队列的总期望执行时间后,则通过比较该指定子任务队列的总期望执行时间与最大期望执行时间的大小来确定是否将该临时任务加入指定子任务队列。具体的,如果该指定子任务队列的总期望执行时间小于该子任务队列的最大期望执行时间,则将临时任务加入该指定子任务队列,否则拒绝临时任务加入该指定子任务队列的加入请求。从而实现在现有资源不能满足调度需求时,丢弃临时任务,以防止不停的有临时任务进入该子任务队列而导致该子任务队列中原有的子任务无法得到调度的问题。

在一个实施例中,如图4所示,该任务执行方法还可以包括如下步骤:

步骤s401,获取紧急任务执行请求。

在本实施例中,优先级队列gpuqueue中还包括一个紧急子任务队列gpuqueueemergency,该紧急子任务队列gpuqueueemergency的优先级别通常为整个优先级队列gpuqueue中最高的。

因此,当有一个任务想要加入紧急子任务队列时,则可以发送加入请求,加入请求中可以携带该任务希望加入的紧急子任务队列的标识,从而根据加入请求将该任务加入紧急子任务队列gpuqueueemergency中。加入紧急子任务队列gpuqueueemergency中的任务则为紧急任务。

步骤s402,执行完当前正在执行的子任务后,执行该紧急任务。

当任务加入紧急子任务队列时系统正在执行其他子任务队列中的子任务,则在执行完毕当前正在执行的任意一个子任务以后,开始执行紧急子任务队列中的突发紧急任务,以实现紧急任务的优先执行。

步骤s403,若紧急任务执行完毕,则根据优先级和最大衰减执行时间返回执行当前正在执行的子任务的下一子任务。

在本实施例中,直到紧急子任务队列中的突发紧急任务被全部执行完毕,再根据优先级队列的优先级和最大衰减执行时间返回执行当前正在执行的子任务的下一子任务,从而实现对突发紧急任务的优先执行。

本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如下步骤:将待执行任务分解为多个执行粒度相同的子任务,并组成子任务队列;获取多个子任务队列的注册请求,其中注册请求中包括多个子任务队列的优先级、最大衰减执行时间;根据优先级和最大衰减执行时间执行多个子任务队列中的子任务。

在一个实施例中,执行粒度相同包括执行时间相同以及占用资源相同,因此,将待执行任务分解为多个执行粒度相同的子任务,包括:根据资源占用以及执行时间将待执行任务分解为多个执行时间相同以及占用资源相同的子任务。

在一个实施例中,根据优先级和最大衰减执行时间执行各子任务队列中的子任务,包括:a、根据优先级按高到低依次执行各子任务队列中的子任务,并记录子任务的执行时间;b、若执行的当前子任务队列中已执行子任务的执行总时间大于当前子任务队列的最大衰减执行时间或当前执行子任务队列中的子任务已执行完毕,则停止执行当前子任务队列中的子任务;c、调度执行下一优先级子任务队列中的子任务,并记录子任务的执行时间;d、返回执行步骤b、c,直到完成对最低优先级子任务队列中的子任务的调度;e、根据优先级按高到低返回依次执行各子任务队列中的未执行子任务,并记录子任务的执行时间;f、返回执行步骤b、c、d、e,直到完成各子任务队列中的所有子任务的执行。

在一个实施例中,注册请求中还包括各子任务队列的标识、与标识对应的子任务队列的最大期望执行时间以及与标识对应的子任务队列中每个子任务的期望执行时间,所述任务执行方法还包括:获取临时任务加入指定子任务队列的加入请求,其中,加入请求中包括临时任务加入指定子任务队列的标识以及临时任务的期望执行时间;根据与标识对应的指定子任务队列中每个子任务的期望执行时间和临时任务的期望执行时间确定指定子任务队列的总期望执行时间;若指定子任务队列的总期望执行时间大于指定子任务队列的最大期望执行时间,则拒绝临时任务加入指定子任务队列的加入请求。

在一个实施例中,还可以包括:若指定子任务队列的总期望执行时间小于指定子任务队列的最大期望执行时间,则将临时任务加入指定子任务队列。

在一个实施例中,根据与标识对应的指定子任务队列中每个子任务的期望执行时间和临时任务的期望执行时间确定指定子任务队列的总期望执行时间,包括:根据标识确定对应的指定子任务队列中的未执行子任务;根据标识对应的指定子任务队列中每个子任务的期望执行时间和未执行子任务,确定标识对应的指定子任务队列中未执行子任务的总期望执行时间;根据标识对应的指定子任务队列中未执行子任务的总期望执行时间和临时任务的期望执行时间确定指定子任务队列的总期望执行时间。

在一个实施例中,任务执行方法还可以包括:获取紧急任务执行请求;则根据优先级和最大衰减执行时间执行各子任务队列中的子任务,包括:执行完当前正在执行的子任务后,执行紧急任务;若紧急任务执行完毕,则根据优先级和最大衰减执行时间返回执行当前正在执行的子任务的下一子任务。

本发明实施例还提供了一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现如下步骤:将待执行任务分解为多个执行粒度相同的子任务,并组成子任务队列;获取多个子任务队列的注册请求,其中注册请求中包括多个子任务队列的优先级、最大衰减执行时间;根据优先级和最大衰减执行时间执行多个子任务队列中的子任务。

在一个实施例中,执行粒度相同包括执行时间相同以及占用资源相同,因此,将待执行任务分解为多个执行粒度相同的子任务,包括:根据资源占用以及执行时间将待执行任务分解为多个执行时间相同以及占用资源相同的子任务。

在一个实施例中,根据优先级和最大衰减执行时间执行各子任务队列中的子任务,包括:a、根据优先级按高到低依次执行各子任务队列中的子任务,并记录子任务的执行时间;b、若执行的当前子任务队列中已执行子任务的执行总时间大于当前子任务队列的最大衰减执行时间或当前执行子任务队列中的子任务已执行完毕,则停止执行当前子任务队列中的子任务;c、调度执行下一优先级子任务队列中的子任务,并记录子任务的执行时间;d、返回执行步骤b、c,直到完成对最低优先级子任务队列中的子任务的调度;e、根据优先级按高到低返回依次执行各子任务队列中的未执行子任务,并记录子任务的执行时间;f、返回执行步骤b、c、d、e,直到完成各子任务队列中的所有子任务的执行。

在一个实施例中,注册请求中还包括各子任务队列的标识、与标识对应的子任务队列的最大期望执行时间以及与标识对应的子任务队列中每个子任务的期望执行时间,所述任务执行方法还包括:获取临时任务加入指定子任务队列的加入请求,其中,加入请求中包括临时任务加入指定子任务队列的标识以及临时任务的期望执行时间;根据与标识对应的指定子任务队列中每个子任务的期望执行时间和临时任务的期望执行时间确定指定子任务队列的总期望执行时间;若指定子任务队列的总期望执行时间大于指定子任务队列的最大期望执行时间,则拒绝临时任务加入指定子任务队列的加入请求。

在一个实施例中,还可以包括:若指定子任务队列的总期望执行时间小于指定子任务队列的最大期望执行时间,则将临时任务加入指定子任务队列。

在一个实施例中,根据与标识对应的指定子任务队列中每个子任务的期望执行时间和临时任务的期望执行时间确定指定子任务队列的总期望执行时间,包括:根据标识确定对应的指定子任务队列中的未执行子任务;根据标识对应的指定子任务队列中每个子任务的期望执行时间和未执行子任务,确定标识对应的指定子任务队列中未执行子任务的总期望执行时间;根据标识对应的指定子任务队列中未执行子任务的总期望执行时间和临时任务的期望执行时间确定指定子任务队列的总期望执行时间。

在一个实施例中,任务执行方法还可以包括:获取紧急任务执行请求;则根据优先级和最大衰减执行时间执行各子任务队列中的子任务,包括:执行完当前正在执行的子任务后,执行紧急任务;若紧急任务执行完毕,则根据优先级和最大衰减执行时间返回执行当前正在执行的子任务的下一子任务。

在一个实施例中,存储器可以包括上述实施例提供的计算机可读存储介质,其实现原理和技术效果可参阅上述实施例,此处不再赘述。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1