任务调度方法及相关装置

文档序号:135167 发布日期:2021-10-22 浏览:22次 >En<

阅读说明:本技术 任务调度方法及相关装置 (Task scheduling method and related device ) 是由 蔡雪建 于 2021-09-07 设计创作,主要内容包括:本申请涉及终端技术领域,公开了一种任务调度方法及相关装置,用于解决任务调度顺序不合理的问题。本申请中首先根据入度筛选出待入队任务,然后参考任务优先级和出度数来进一步对任务进行排序。任务优先级为用户基于需求设定的优先级,出度能够表示依赖该任务的任务数量,依照出度数能够优先调度对其他任务影响较大的任务,故此,本申请实施例中参照入度、任务优先级和出度数,能够全面描述一个任务的重要程度,根据任务优先级和出度数能够动态调整任务在任务队列中的顺序,相比只通过入度确定任务执行顺序,本申请能够更全面的确定任务执行顺序,缓解高优任务不能被及时调度执行的问题。(The application relates to the technical field of terminals, and discloses a task scheduling method and a related device, which are used for solving the problem of unreasonable task scheduling sequence. In the application, the tasks to be enqueued are screened out according to the in-degree, and then the tasks are further sequenced by referring to the task priority and the out-degree. The task priority is set by a user based on requirements, the out-degree can represent the number of tasks depending on the tasks, and the tasks with larger influence on other tasks can be scheduled preferentially according to the out-degree, so that in the embodiment of the application, the importance degree of one task can be described comprehensively by referring to the in-degree, the task priority and the out-degree, the sequence of the tasks in the task queue can be dynamically adjusted according to the task priority and the out-degree, and compared with the method for determining the task execution sequence only through the in-degree, the task execution sequence can be determined more comprehensively by the application, and the problem that high-priority tasks cannot be scheduled and executed in time is solved.)

任务调度方法及相关装置

技术领域

本申请涉及终端技术领域,尤其涉及一种任务调度方法及相关装置。

背景技术

在移动开发技术领域,随着应用的不断迭代,启动时的任务也越来越多,任务调度所需的时间也越来越长。当前一些调度方法如时间片轮转调度,虽然可以缩短任务调度时间,但是从调度结果来看,任务调度顺序仍存在不合理的情况,例如只是按照任务入度调度任务,致使一些高优任务无法被及时调度。

发明内容

本申请公开了一种任务调度方法及相关装置,用于解决任务调度顺序不合理的问题。

第一方面,本申请提供一种任务调度方法,该方法包括:

从有向无环图中筛选出入度为0的任务作为待入队任务;

根据所述待入队任务的任务优先级和出度数确定所述待入队任务在任务队列中的排序;其中,所述有向无环图是根据任务之间的依赖关系确定的;

基于所述任务队列进行任务调度;

基于任务调度每执行完一个任务,则将所述任务从有向无环图中删除,更新所述有向无环图中各任务的入度,并返回执行从有向无环图中筛选入度为0的任务作为待入队任务的步骤,直至有向无环图的全部任务被删除。

可选的,执行任务的线程包括主线程和子线程,有向无环图中包括待由主线程执行的主线程任务和待由子线程执行的子线程任务,所述基于所述任务队列进行任务调度,包括:

若所述任务队列中所有主线程任务执行完毕且主线程空闲,则从更新后的所述有向无环图中筛选出待入任务队列的主线程任务;

基于有向无环图,确定所述待入任务队列的主线程任务所依赖的子线程任务,其中所述子线程任务为已添加到任务队列中并且尚未执行的任务;

若所述子线程任务在任务队列中且尚未执行,则将所述子线程任务调度到主线程中执行。

可选的,所述基于有向无环图,确定所述待入任务队列的主线程任务所依赖的子线程任务之后,所述方法还包括:所述确定所述待入任务队列的主线程任务所依赖的子线程任务包括:

若所述子线程任务的入度为0,则将所述子线程任务添加到所述任务队列中;

若所述子线程任务的入度不为0,则等待所述子线程任务的入度为0时,将所述子线程任务添加到所述任务队列中。

可选的,所述更新所述有向无环图中各任务的入度之后,所述方法还包括:

从所述有向无环图中筛选出入度为0的待入队任务;

若首次执行所述待入队任务,则根据所述待入队任务的任务优先级和出度数确定所述待入队任务在任务队列中的排序;

若非首次执行所述待入队任务,则根据所述待入队任务的任务优先级、出度数和执行耗时确定所述待入队任务在任务队列中的排序。

可选的,所述根据所述待入队任务的任务优先级、出度数和执行耗时确定所述待入队任务在任务队列中的排序,包括:

基于排序规则确定所述待入队任务在任务队列中的排序,所述排序规则包括:

优先级高的任务排序在优先级低的任务之前;

出度高的任务排序在出度低的任务之前;

执行耗时高的任务排序在执行耗时低的任务之前。

可选的,所述基于排序规则确定所述待入队任务在任务队列中的排序,具体包括:

依序遍历所述任务队列中的每个任务,遍历到的任务作为参考任务,并针对任意参考任务执行以下操作:

若所述待入队任务的任务优先级高于所述参考任务,则所述待入队任务的执行顺序在所述参考任务之前并结束遍历;

若所述待入队任务的任务优先级不高于所述参考任务,且所述待入队任务的出度高于所述参考任务的出度,则所述待入队任务的执行顺序在所述参考任务之前并结束遍历;

若所述待入队任务的优先级不高于所述参考任务,且所述待入队任务的出度不高于所述参考任务,且所述待入队任务执行耗时高于所述参考任务,则所述待入队任务的执行顺序在所述参考任务之前并结束遍历;

若所述待入队任务的优先级、出度、执行耗时均不高于所述参考任务,则遍历所述参考任务的下一任务。

可选的,所述将所述子线程任务调度到主线程中执行之前,还包括:

确定满足调度条件,其中所述调度条件包括:

所述子线程任务的前置任务均已执行且所述前置任务的出度为0,所述前置任务为所述任务队列中位于子线程任务之前的任务。

可选的,所述根据所述待入队任务的任务优先级、出度数和执行耗时确定所述待入队任务在任务队列中的排序之前,所述方法还包括:

从指定文件中读取所述待入队任务的执行耗时;

其中,所述指定文件通过以下方式确定:每执行完一个任务,统计所述任务的耗时信息,所有任务都执行完毕后,将各个任务的执行耗时同步到指定文件中。

第二方面,本申请提供一种任务调度装置,该装置包括:

筛选模块,被配置为执行从有向无环图中筛选出入度为0的任务作为待入队任务;

排序模块,被配置为执行根据所述待入队任务的任务优先级和出度数确定所述待入队任务在任务队列中的排序;其中,所述有向无环图是根据任务之间的依赖关系确定的;

调度模块,被配置为执行基于所述任务队列进行任务调度;

更新模块,被配置为执行基于任务调度每执行完一个任务,则将所述任务从有向无环图中删除,并更新所述有向无环图中各任务的入度,返回执行从有向无环图中筛选入度为0的任务作为待入队任务的步骤,直至有向无环图的全部任务被删除。

可选的,执行任务的线程包括主线程和子线程,有向无环图中包括待由主线程执行的主线程任务和待由子线程执行的子线程任务,基于所述任务队列进行任务调度,所述调度模块具体被配置为执行:

若所述任务队列中所有主线程任务执行完毕且主线程空闲,则从更新后的所述有向无环图中筛选出待入任务队列的主线程任务;

基于有向无环图,确定所述待入任务队列的主线程任务所依赖的子线程任务;

若所述子线程任务在任务队列中且尚未执行,则将所述子线程任务调度到主线程中执行。

可选的,所述基于有向无环图,确定所述待入任务队列的主线程任务所依赖的子线程任务之后,所述调度模块还被配置为执行:

若所述子线程任务的入度为0,则将所述子线程任务添加到所述任务队列中;

若所述子线程任务的入度不为0,则等待所述子线程任务的入度为0时,将所述子线程任务添加到所述任务队列中。

可选的,所述更新所述有向无环图中各任务的入度之后,所述筛选模块,还被配置为执行从所述有向无环图中筛选出入度为0的待入队任务;

所述排序模块,具体被配置为执行:

若首次执行所述待入队任务,则根据所述待入队任务的任务优先级和出度数确定所述待入队任务在任务队列中的排序;

若非首次执行所述待入队任务,则根据所述待入队任务的任务优先级、出度数和执行耗时确定所述待入队任务在任务队列中的排序。

可选的,执行所述根据所述待入队任务的任务优先级、出度数和执行耗时确定所述待入队任务在任务队列中的排序,所述排序模块具体被配置为执行:

基于排序规则确定所述待入队任务在任务队列中的排序,所述排序规则包括:

优先级高的任务排序在优先级低的任务之前;

出度高的任务排序在出度低的任务之前;

执行耗时高的任务排序在执行耗时低的任务之前。

可选的,执行所述基于排序规则确定所述待入队任务在任务队列中的排序,所述排序模块具体被配置为执行:

依序遍历所述任务队列中的每个任务,遍历到的任务作为参考任务,并针对任意参考任务执行以下操作:

若所述待入队任务的任务优先级高于所述参考任务,则所述待入队任务的执行顺序在所述参考任务之前并结束遍历;

若所述待入队任务的任务优先级不高于所述参考任务,且所述待入队任务的出度高于所述参考任务的出度,则所述待入队任务的执行顺序在所述参考任务之前并结束遍历;

若所述待入队任务的优先级不高于所述参考任务,且所述待入队任务的出度不高于所述参考任务,且所述待入队任务执行耗时高于所述参考任务,则所述待入队任务的执行顺序在所述参考任务之前并结束遍历;

若所述待入队任务的优先级、出度、执行耗时均不高于所述参考任务,则遍历所述参考任务的下一任务。

可选的,所述将所述子线程任务调度到主线程中执行之前,所述装置还包括:

确定模块,被配置为执行确定满足调度条件,其中所述调度条件包括:

所述子线程任务的前置任务均已执行且所述前置任务的出度为0,所述前置任务为所述任务队列中位于子线程任务之前的任务。

可选的,所述根据所述待入队任务的任务优先级、出度数和执行耗时确定所述待入队任务在任务队列中的排序之前,所述装置还包括:

信息处理模块,被配置为执行从指定文件中读取所述待入队任务的执行耗时;

其中,所述指定文件通过以下方式确定:每执行完一个任务,统计所述任务的耗时信息,所有任务都执行完毕后,将各个任务的执行耗时同步到指定文件中。

第三方面,本申请还提供了一种终端设备,包括:

处理器;

用于存储所述处理器可执行指令的存储器;

其中,所述处理器被配置为执行所述指令,以实现如本申请第一方面中提供的任一方法。

第四方面,本申请一实施例还提供了一种计算机可读存储介质,当所述计算机可读存储介质中的指令由终端设备的处理器执行时,使得终端设备能够执行如本申请第一方面中提供的任一方法。

第五方面,本申请一实施例提供了一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如本申请第一方面中提供的任一方法。

本申请的实施例提供的技术方案至少带来以下有益效果:

本申请实施例中,首先根据入度筛选出待入队任务,然后参考任务优先级和出度来进一步对任务进行排序。其中,任务优先级为用户基于需求设定的优先级,由此,通过任务优先级作为排序的一个影响因素能够使得优先级高的任务及时得到调度。在进行任务调度时,本申请不仅参考任务优先级还参考出度数进行排序。由于出度能够表示依赖该任务的任务数量,依照出度数能够优先调度对其他任务影响较大的任务,故此,本申请实施例中参照入度、任务优先级和出度数,能够全面描述一个任务的重要程度,根据任务优先级和出度数能够动态调整任务在任务队列中的顺序,相比只通过入度确定任务执行顺序,本申请能够参考任务的优先级和出度,更全面的确定任务执行顺序,缓解高优任务不能被及时调度执行的问题。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

为了更清楚的说明本申请实施的技术方案,下面经对本发明所需要的附图作简要介绍。

图1是本申请实施例提供的一种有向无环图示例;

图2是本申请实施例提供的一种终端设备;

图3是本申请实施例提供的启动任务调动算法的流程图;

图4是本申请实施例提供的任务队列排序流程图;

图5是本申请实施例提供的任务队列之外的任务添加到任务队列的流程图;

图6是本申请实施例提供的子线程任务调往主线程的流程图;

图7是本申请实施例提供的任务耗时统计的流程图;

图8是本申请实施例提供的任务调度总体流程图;

图9是本申请实施例提供的任务调度装置的结构框图描述;

图10是本申请实施例提供的终端设备的结构示意图。

具体实施方式

为了使本领域普通人员更好地理解本申请的技术方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应所述理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。

以下,对本申请实施例中的部分用语进行解释说明,以便于本领域技术人员理解。

有向无环图:在数学,特别是图论和计算机科学中,有向无环图指的是一个无回路的有向图。如果有一个非有向无环图,且A点出发向B经C可回到A,形成一个环。将从C到A的边方向改为从A到C,则变成有向无环图。

入度:在有向无环图中,以顶点为头的边的数目称为该顶点的入度,如图1所示,任务2的入度为2;即,执行该任务所依赖的任务数量,例如需要任务B、任务C和任务D都执行完才能执行任务A,则任务B、任务C和任务D为任务A所依赖的任务,任务A的入度为3。

出度:在有向无环图中,以顶点为尾的边的数目称为该顶点的出度,如图1所示,任务2的出度为1;

执行耗时:任务从开始执行到执行完所需的时间;

任务依赖关系:只有当前面一个/多个任务完成后,才能完成下一个任务,一般有以下几种关系:

输入输出关系:如果A任务的输出是B任务的输入,那么显然B任务只有在A任务完成后才能开始执行;

资源依赖关系:这种关系是指两个或多个任务需要使用同一个资源,但又不能同时使用,只能在一个任务完成后,资源才能释放出来被其他任务使用。因此这些任务之间只能是顺序关系,待一个任务完成后另一个任务才能开始。

需求的关键程度:要优先安排开发关键功能需求、全局性功能需求、接口需求、非功能需求等与系统架构有关的需求的开发任务。

需求之间的接口关系:如果功能C是对功能A和功能B两个功能的输出进行组装,那么功能C的实现就必须建立在功能A和功能B都已经完成,并且给出正确的输出的基础上。对于这3个功能实现任务来说,就是当A、B两个任务都完成,C任务才开始;

采购关系如果存在需要采购的外部构件,则采购任务必须先完成,才能对这些构件进行集成和测试。

在进行任务调度时,当前一些调度方法如时间片轮转调度,虽然可以缩短任务调度时间,但是一般只参考任务的执行耗时对需要调度的任务进行排序,容易导致任务调度顺序不合理,致使一些任务无法被及时调度的问题。

有鉴于此,本申请主要根据以上缺陷提出了一种任务调度方法,该方法的发明构思可概括为:

在开始处理任务之前,先根据任务的依赖关系建立类似于图1所示的有向无环图G={V,E},其中V是节点的集合,表示待启动任务中待处理的任务,E代表任务间的依赖关系。在任务执行过程中,为了能够更好的确定任务执行顺序,本申请实施例中会先在所述有向无环图中选取入度为0的任务,然后基于任务优先级和出度数确定所述待入队任务在任务队列中的排序得到任务队列。本申请实施例中,任务优先级为用户基于需求设定的优先级,由此,通过任务优先级作为排序的一个影响因素能够使得优先级高的任务及时得到调度。在进行任务调度时,本申请不仅参考任务优先级还参考出度数进行排序。由于出度能够表示依赖该任务的任务数量,依照出度数能够优先调度对其他任务影响较大的任务,故此,本申请实施例中参照任务优先级和出度数,能够全面描述一个任务的重要程度,相比只通过任务的入度确定执行顺序,本申请能够更全面的确定任务执行顺序,缓解高优任务不能够被及时调度执行的问题。

此外,在本申请的另一些实施例中,在移动端上任务可以在处于后台的子线程与用户界面的主线程并行执行。为了能够提高线程的利用率,本申请在任务执行时设计了任务的动态调度和任务队列的动态更新。在执行之前先建立有向无环图,读取任务信息,即任务的入度、优先级、执行耗时和任务是在主线程还是子线程中执行。然后根据任务的优先级、出度数和执行耗时确定任务的执行序列。为了防止主线程的任务因为依赖的子线程任务未执行而无法执行,本申请提出的动态调度方法保证了各个线程的使用效率,缓解线程空闲带来的执行耗时增加的问题。

如,若主线程空闲,即此时任务队列中已没有待执行的主线程任务。若所述有向无环图中待入任务队列的主线程任务所依赖的子线程任务入度为0,则先将待入任务队列的主线程任务所依赖的子线程任务添加到任务队列中;若待入任务队列的主线程任务所依赖的子线程任务已经在所述任务队列中但尚未被执行,则遍历待入任务队列的子线程任务的前置任务,确定是否将所述待入任务队列的子线程任务调往主线程执行。当所述待入任务队列的主线程任务所依赖得子线程任务都执行完毕后,将所述待入任务队列的主线程任务添加到任务队列等待执行。

在介绍完本申请实施例的设计思想之后,下面对本申请实施例的技术方案能够适用的应用场景做一些简单介绍,需要说明的是,以下介绍的应用场景仅用于说明本申请实施例而非限定。在具体实施时,可以根据实际需要灵活地应用本申请实施例提供的技术方案。

参考图2,其为本申请实施例提供的应用场景示意图。该应用场景中包括终端设备和该终端设备启动任务时所需的线程,包括主线程和子线程,主线程只有一个,子线程在终端设备中有多个,如图2中有子线程1、子线程2、……、子线程n,其中n为自然数,多个子线程可以构成子线程池。执行任务时每次最多可以执行n+1个任务。该终端设备包括但不限于桌面计算机、移动电话、移动电脑、平板电脑、媒体播放器、智能可穿戴设备、智能电视等电子设备。

当然,本申请实施例提供的方法并不限于图2所示的应用场景,还可以用于其它可能的应用场景,本申请实施例并不进行限制。对于图2所示的应用场景的各个设备所能实现的功能将在后续的方法实施例中一并进行描述,在此先不过多赘述。

为进一步说明本申请实施例提供的技术方案,下面结合附图以及具体实施方式对此进行详细的说明。虽然本申请实施例提供了如下述实施例或附图所示的方法操作步骤,但基于常规或者无需创造性的劳动在所述方法中可以包括更多或者更少的操作步骤。在逻辑上不存在必要因果关系的步骤中,这些步骤的执行顺序不限于本申请实施例提供的执行顺序。

在执行任务前,根据任务间的依赖关系建立任务的有向无环图。用户可以根据自身需要指定任务的优先级,然后在读取任务本身的相关信息时确定任务该调往主线程还是子线程,同时相关信息还包括任务的优先级、出度数和执行耗时,当然首次执行的任务可能不存在执行耗时信息,下文中将会对首次执行的任务和非首次执行的任务如何进行排序分别进行详细说明。

在执行任务时,如图3所示为本申请实施例提供的任务调度方法的流程示意图,包括以下步骤:

在步骤301中,从有向无环图中筛选出入度为0的任务作为待入队任务。

在步骤302中,根据所述待入队任务的任务优先级和出度数确定所述待入队任务在任务队列中的排序。

待入队任务可能是首次执行的任务,也可能是非首次执行的任务。

针对首次执行的任务,由于没有任务的执行耗时信息,因此在生成任务队列时只参考任务优先级和出度数对任务进行排序。

一个任务被执行,可以统计该任务的耗时信息。本申请实施例中可提供一个指定文件,用于记录各个任务的执行耗时信息。为了得到任务的执行耗时,可在第一个任务启动时建立该指定文件,以存储执行所有任务过程中对各任务统计到的耗时信息,以便下一次启动时调用。

鉴于指定文件中保存有任务的耗时信息,可以针对非首次执行的任务,先从指定文件中读取待入队任务的执行耗时,然后结合其任务优先级和出度数进行排序。采用指定文件中管理耗时信息便于将多个任务的耗时信息统一管理,而结合任务优先级、出度数和执行耗时实现从多个维度衡量待入队任务在任务队列中的排序,进一步提高排序的准确性。

任务优先级、出度数和执行耗时这三个维度为例,可以构建排序规则,该排序规则可包括:

优先级高的任务排序在优先级低的任务之前;

出度高的任务排序在出度低的任务之前;

执行耗时高的任务排序在执行耗时低的任务之前。

基于该排序规则可以使得优先级高的优先执行,进而通过出度使得对其他任务影响较大的优先执行,而后是执行耗时高的优先执行。

基于以上排序规则进行排序的一种可能的实施方式为可以按照一定顺序判断各个影响排序的因子(包括任务优先级、出度数和执行耗时)对排序的影响,判断方式例如图4所示,可包括以下步骤:

在步骤401中,遍历任务队列以从任务队列中获取参考任务。

在步骤402中,若待入队任务的任务优先级高于参考任务,则待入队任务的执行顺序在参考任务之前并结束遍历;

其中,若任务队列中没有任务则可以随机添加一个也需要入队的任务到任务队列中作为参考任务。

在步骤403中,若待入队任务的任务优先级不高于参考任务,且待入队任务的出度高于参考任务的出度,则待入队任务的执行顺序在参考任务之前并结束遍历;

在步骤404中,若待入队任务的优先级不高于参考任务,且待入队任务的出度不高于参考任务,且待入队任务执行耗时高于参考任务,则待入队任务的执行顺序在参考任务之前并结束遍历;

在步骤405中,若待入队任务的优先级、出度、执行耗时均不高于参考任务,若存在下一参考任务则遍历参考任务的下一任务,若不存在下一参考任务,则待入队任务在参考任务之后并结束遍历。

根据以上参数对比排序后得到的任务队列,能保证高优先级的任务被及时调用,并且在进行并行执行时,执行耗时较高的任务先执行可以有效缩短所有任务的总执行耗时,同理出度较高的任务先执行可以避免出现一些依赖程度较高的任务入队却无法被执行的情况。

实施时,依序将待入队任务和参考任务进行比较的流程,可以如图5所示包括以下步骤:

在步骤501中,对待插入任务(即待入队任务)引入插入索引index1,初始化index1的值为1。

在步骤502中,待插入任务队列任务数量是否小于1,若是执行步骤508若否执行步骤503。

其中,插入待插入任务前,待插入任务队列中每个任务具有对应的index2,任务队列中已有任务的index2值表示任务在任务序列中的排序,本申请中为了便于确定待插入任务在待插入任务队列中的序号,可按照index2值从小到大顺序依序遍历待插入任务队列中每个任务。

在步骤503中,针对当前遍历到的第index2个任务,若待插入任务的优先级大于第index2个任务,则执行步骤507,否则执行步骤504。

在步骤504中,将待插入任务继续与第index2个任务的出度数进行比较,若待插入任务出度数大于第index2个任务,则执行步骤507,否则执行步骤505。

在步骤505中,将待插入任务继续与第index2个任务的执行耗时进行比较,若待插入任务的执行耗时大于index2个任务,则执行步骤507,否则执行步骤506。

在步骤506中,index1自增1,并从任务序列中获取下一个需要遍历的第index2个任务,并返回执行步骤503,若不存在下一个需要遍历的index2个任务,则结束遍历。

在步骤507中,将待插入任务插入第index2个任务之前并结束遍历,此时index1的值即为待插入任务在任务序列中的序号。

在步骤508中,将待插入任务存储到任务队列中。

通过index1值大小,最终能够方便的得到待插入任务的排序序号。

得到任务序列后,在步骤303中,基于任务队列进行任务调度。

为了更好的帮助理解图5中index的含义,下面以任务队列中有两个任务为例介绍图5的实施过程。初始化index值为1,此时待插入任务与任务队列中第一个任务的优先级、出度数和执行耗时进行比较。若待插入任务的任务优先级高于参考任务,则将待插入任务插入到参考任务之前并结束遍历;若待插入任务的任务优先级不高于参考任务,且待入队任务的出度高于参考任务的出度,则将待插入任务插入到参考任务之前并结束遍历;若待插入任务的优先级不高于参考任务,且待插入任务的出度不高于参考任务,且待插入任务执行耗时高于参考任务,则将待插入任务插入到参考任务之前并结束遍历。若待插入任务的优先级、出度、执行耗时均不高于参考任务,此时index自增1,即index的值为2,将待插入任务与任务队列中第二个参考任务的优先级、出度数和执行耗时进行比较,比较方式与和第一个参考任务的比较方式相同。若待入队任务的优先级、出度、执行耗时均不高于第二个参考任务,index自增1,此时index值为3,待插入任务插入在任务队列中的序号为3,将待插入任务的插入第二个参考任务之后。

为了能够动态的更新任务队列,及时调度任务优先级高、出度数高和执行耗时高的任务,本申请实施例中,在步骤304中,基于任务调度每执行完一个任务,则将任务从有向无环图中删除,并更新有向无环图中各任务的入度。然后在步骤305中检测有向无环图中是否还有任务,若有任务则返回执行步骤301,实现对任务队列的更新,若无任务则结束运行。

本申请实施例中,执行任务的线程包括主线程和子线程,并且任务在哪些线程执行是由任务信息所确定的。在任务未执行时,通过读取的任务信息确定任务是在主线程还是在子线程中执行。为了合理利用处理资源,本申请实施例中可根据需求将子线程任务调度到空闲的主线程中执行。一种可能的实施方式,可以如图6所示:

在步骤601中,若任务队列中所有主线程任务执行完毕且主线程空闲,则从更新后的有向无环图中筛选出待入任务队列的主线程任务。

在步骤602中,基于有向无环图,确定待入任务队列的主线程任务所依赖的子线程任务。

其中,待入任务队列的主线程任务所依赖的子线程任务可能包含已在任务队列中的任务,也可能包含未在任务队列扔在有向无环图中的任务。

针对已在任务队列但尚未执行的子任务,可在步骤605中,将该子线程任务调度到主线程中执行。这样的动态调度避免了主线程的闲置,提高了任务执行的效率。

此外,若为了保证任务队列严格有序执行,本申请实施例中,还可以增设将子线程任务调度到主线程执行的调度条件。假设定义在任务队列中已入任务队列的子线程任务之前的任务为该已入任务队列的子线程任务的前置任务。则如图6所示,该调度条件可包括该已入任务队列的子线程任务的前置任务均已执行且前置任务的出度为0,来保证在已入任务队列的子线程任务调度到主线程执行之前,其前置任务执行结束。

确定前置任务是否执行的方式可实施为如图6所示:

在步骤603中依次遍历前置任务。

在步骤604中判断遍历的前置任务是否执行,若未执行则返回步骤603,否则执行步骤605。

针对仍在有向无环图中的子任务,可在步骤606中,若子线程任务的入度为0,则将子线程任务添加到任务队列中;若子线程任务的入度不为0,则等待子线程任务的入度为0时,将子线程任务添加到任务队列中,然后返回执行步骤603。

由此,可以保证需要执行的主线程任务的子线程任务尽可能早的被执行。

当然,需要说明的是,每执行完一次前置任务都会更新有向无环图,此时可若主线程空闲且任务队列中所有主线程任务都执行完成,则可以重新筛选待入任务队列的主线程任务,然后执行如图6所示的流程。

由于以上执行步骤都需要用到任务的执行耗时,因此为了合理利用线程,本申请在一种实施例中根据统筹安排的原理,提出了一种统计任务执行耗时的方法,如图7所示:

在步骤701中,每次启动任务时先从指定文件中读取待入队任务的执行耗时。

在步骤702中,根据任务优先级、出度数、执行耗时对待入队任务进行排序将待入队任务插入任务队列以便于进行任务调度。

在步骤703中,基于任务调度每执行完一个任务,统计任务的耗时信息。

在步骤704中,确认所有任务是否均已执行,若还有任务未执行,则返回步骤703,否则执行步骤705,将各个任务的执行耗时同步到指定文件中。

需要说明的是,由于第一次启动任务时任务的执行耗时未知,因此第一次不对比任务的执行耗时,而是先建立一个文件,以便存储执行是统计的任务执行耗时信息,以便下一次启动时调用。

为便于系统的理解本申请实施例提供的任务调度方法进行说明,参照图8所示:

在步骤801中:获取移动端的任务有向无环图,读取任务参数;

在步骤802中:遍历有向无环图中节点,找出所有入度为0的任务作为待入队任务,然后根据任务优先级、出度、执行耗时与任务队列中已有的任务比较,确定待入队任务的插入位置;

其中,若是首次执行任务,则建立指定文件,存储任务执行过程中统计到各任务的耗时信息;

在步骤803中:以优化启动任务调度的总耗时为目标,使用基于多核CPU负载均衡的任务调度方法,将任务队列中的任务分配到相应的执行线程中。

在步骤804中:扫描任一被执行的任务的执行情况,该任务执行完成后删除相应任务并更新有向无环图;

在步骤805中:判断有向无环图中是否还有任务,若无则结束运行,否则返回步骤802。

基于相同的发明构思,本申请实施例还提供一种任务调度装置,如图9所示,该装置900包括:

筛选模块901,被配置为执行从有向无环图中筛选出入度为0的任务作为待入队任务;

排序模块902,被配置为执行根据待入队任务的任务优先级和出度数确定待入队任务在任务队列中的排序;其中,有向无环图是根据任务之间的依赖关系确定的;

调度模块903,被配置为执行基于任务队列进行任务调度;

更新模块904,被配置为执行基于任务调度每执行完一个任务,则将任务从有向无环图中删除,更新有向无环图中各任务的入度,并返回执行从有向无环图中筛选入度为0的任务作为待入队任务的步骤,直至有向无环图的全部任务被删除。

可选的,执行任务的线程包括主线程和子线程,有向无环图中包括待由主线程执行的主线程任务和待由子线程执行的子线程任务,基于任务队列进行任务调度,装置包括:

调度模块903,具体被配置为执行若任务队列中所有主线程任务执行完毕且主线程空闲,则从更新后的有向无环图中筛选出待入任务队列的主线程任务;

基于有向无环图,确定待入任务队列的主线程任务所依赖的子线程任务;

若子线程任务在任务队列中且尚未执行,则将子线程任务调度到主线程中执行。

可选的,基于有向无环图,确定待入任务队列的主线程任务所依赖的子线程任务之后,调度模块903还被配置为执行:

若子线程任务的入度为0,则将子线程任务添加到任务队列中;

若子线程任务的入度不为0,则等待子线程任务的入度为0时,将子线程任务添加到任务队列中。

可选的,更新有向无环图中各任务的入度之后,筛选模块901,还被配置为执行从所述有向无环图中筛选出入度为0的待入队任务;

排序模块902,具体被配置为执行:

若首次执行待入队任务,则根据待入队任务的任务优先级和出度数确定待入队任务在任务队列中的排序;

若非首次执行待入队任务,则根据待入队任务的任务优先级、出度数和执行耗时确定待入队任务在任务队列中的排序。

可选的,执行根据待入队任务的任务优先级、出度数和执行耗时确定待入队任务在任务队列中的排序,排序模块902具体被配置为执行:

基于排序规则确定待入队任务在任务队列中的排序,排序规则包括:

优先级高的任务排序在优先级低的任务之前;

出度高的任务排序在出度低的任务之前;

执行耗时高的任务排序在执行耗时低的任务之前。

可选的,执行所述基于排序规则确定所述待入队任务在任务队列中的排序,排序模块902具体被配置为执行:

依序遍历任务队列中的每个任务,遍历到的任务作为参考任务,并针对任意参考任务执行以下操作:

若待入队任务的任务优先级高于参考任务,则待入队任务的执行顺序在参考任务之前并结束遍历;

若待入队任务的任务优先级不高于参考任务,且待入队任务的出度高于参考任务的出度,则待入队任务的执行顺序在参考任务之前并结束遍历;

若待入队任务的优先级不高于参考任务,且待入队任务的出度不高于参考任务,且待入队任务执行耗时高于参考任务,则待入队任务的执行顺序在参考任务之前并结束遍历;

若待入队任务的优先级、出度、执行耗时均不高于参考任务,则遍历参考任务的下一任务。

可选的,将子线程任务调度到主线程中执行之前,装置还包括:

确定模块905,被配置为执行确定满足调度条件,其中调度条件包括:

子线程任务的前置任务均已执行且前置任务的出度为0,前置任务为任务队列中位于子线程任务之前的任务。

可选的,根据待入队任务的任务优先级、出度数和执行耗时确定待入队任务在任务队列中的排序之前,装置还包括:

信息处理模块906,被配置为执行从指定文件中读取待入队任务的执行耗时;

其中,指定文件通过以下方式确定:每执行完一个任务,统计任务的耗时信息,所有任务都执行完毕后,将各个任务的执行耗时同步到指定文件中。

在介绍了本申请示例性实施方式的方法和后,接下来,介绍根据本申请的另一示例性实施方式的电子设备。

所属技术领域的技术人员能够理解,本申请的各个方面可以实现为系统、方法或程序产品。因此,本申请的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。

在一些可能的实施方式中,根据本申请的电子设备可以至少包括至少一个处理器、以及至少一个存储器。其中,存储器存储有程序代码,当程序代码被处理器执行时,使得处理器执行本说明书上述描述的根据本申请各种示例性实施方式的任务调度方法。例如,处理器可以执行如任务调度方法中的步骤。

下面参照图10来描述根据本申请的这种实施方式的电子设备。图10显示的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。

如图10所示,电子设备130以通用电子设备的形式表现。电子设备130的组件可以包括但不限于:上述至少一个处理器131、上述至少一个存储器132、连接不同系统组件(包括存储器132和处理器131)的总线133。

总线133表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、处理器或者使用多种总线结构中的任意总线结构的局域总线。

存储器132可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)1321和/或高速缓存存储器1322,还可以进一步包括只读存储器(ROM)1323。

存储器132还可以包括具有一组(至少一个)程序模块1324的程序/实用工具1325,这样的程序模块1324包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。

电子设备130也可以与一个或多个外部设备134(例如键盘、指向设备等)通信,还可与一个或者多个使得用户能与电子设备130交互的设备通信,和/或与使得该电子设备130能与一个或多个其它电子设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口135进行。并且,电子设备130还可以通过网络适配器136与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。应当理解,尽管图中未示出,可以结合电子设备130使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。

在示例性实施例中,还提供了一种包括指令的计算机可读存储介质,例如包括指令的存储器132。可选地,存储介质可以是非临时性计算机可读存储介质,例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。

在示例性实施例中,还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器131执行时实现如本申请提供的任务调度方法的任一方法。

在示例性实施例中,本申请提供的任务调度方法的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在计算机设备上运行时,程序代码用于使计算机设备执行本说明书上述描述的根据本申请各种示例性实施方式的任务调度方法中的步骤。

程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。

本申请的实施方式的用于任务调度方法的程序产品可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在电子设备上运行。然而,本申请的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。

可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本申请操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户电子设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户电子设备上部分在远程电子设备上执行、或者完全在远程电子设备或服务端上执行。在涉及远程电子设备的情形中,远程电子设备可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户电子设备,或者,可以连接到外部电子设备(例如利用因特网服务提供商来通过因特网连接)。

此外,尽管在附图中以特定顺序描述了本申请方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程图像缩放设备的处理器以产生一个机器,使得通过计算机或其他可编程图像缩放设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本申请的实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

27页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:任务处理方法、装置和电子设备

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!