任务调度方法及装置
技术领域
本发明实施例涉及互联网技术领域,尤其涉及一种任务调度方法及装置。
背景技术
任务调度是操作系统的重要组成部分,而对于实时操作系统,任务调度直接影响其实时性能。
现有的任务调度系统大都采用如下方法:首先根据任务间的依赖关系构造任务调度列表,然后采用时间片轮询算法实现调度。具体来说,实时扫描上述任务调度列表,选择要执行的任务;判断前置任务的状态;若确定要执行的任务的运行时间满足且前置任务执行完毕,则启动执行选择的任务。
但是,现有的任务调度系统的实现方式以时间片轮询算法为主,只考虑到任务运行时间和任务间依赖关系,未充分利用剩余资源,集群资源利用率低,任务执行效率有待优化。
发明内容
本发明实施例提供一种任务调度方法及装置,以优化现有的任务调度系统,提高资源利用率,从而提高任务执行效率。
第一方面,本发明实施例提供了一种任务调度方法,包括:
对于由网络状任务节点构成的任务集群,创建任务优先级队列;
按照优先级顺序从所述任务优先级队列中选择任务为当前任务,并计算所述当前任务的资源使用率;
根据所述当前任务的资源使用率确定是否有剩余资源,若确定有剩余资源,则从所述任务优先级队列中选择所需资源小于剩余资源的至少一个EST为零的任务作为当前任务;
同时执行各所述当前任务;
将各所述当前任务的各级子任务的EST减一,并返回执行从所述任务优先级队列中选择当前任务的操作。
第二方面,本发明实施例还提供一种任务调度装置,包括:
任务队列创建模块,用于对于由网络状任务节点构成的任务集群,创建任务优先级队列;
任务选择模块,用于按照优先级顺序从所述任务优先级队列中选择任务为当前任务,并计算所述当前任务的资源使用率,根据所述当前任务的资源使用率确定是否有剩余资源,若确定有剩余资源,则从所述任务优先级队列中选择所需资源小于剩余资源的至少一个EST为零的任务作为当前任务;
任务执行模块,用于同时执行各所述当前任务,将各所述当前任务的各级子任务的EST减一,并返回执行从所述任务优先级队列中选择当前任务的操作。
本发明实施例在从任务优先级队列中选择任务为当前任务后,并不立即执行,而是计算所述当前任务的资源使用率,若确定有剩余资源,则从所述任务优先级队列中选择所需资源小于剩余资源的至少一个EST为零的任务作为当前任务,同时执行各所述当前任务。因此,本发明实施例相对于现有技术,充分利用了集群的剩余资源,从而提高了任务执行效率。
附图说明
图1a为本发明实施例一提供的一种任务调度方法的流程示意图;
图1b为本发明实施例一提供的一种任务调度方法中的任务集群示意图;
图2a为本发明实施例二提供的一种任务调度方法的流程示意图;
图2b为本发明实施例二提供的一种任务调度方法中的任务集群示意图;
图2c为本发明实施例二提供的一种任务调度方法中的当前任务的父任务构造的有向无环图;
图3为本发明实施例三提供的一种任务调度装置的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
本发明实施例提供的任务调度方法的执行主体,可为终端设备(例如PC机、移动终端等),或为安装在终端设备上的任务调度装置,该任务调度装置可以采用硬件或软件实现。
实施例一
图1a为本发明实施例一提供的一种任务调度方法的流程示意图,如图1a所示,具体包括:
步骤11、对于由网络状任务节点构成的任务集群,创建任务优先级队列;
其中,任务集群为多个任务的集合,各个任务之间可能存在相互依赖关系,即父任务执行完成后,其子任务才可以执行。任务之间的依赖关系采用网络图来表示。每个任务作为一个任务节点,节点之间的连线表征任务之间的依赖关系。任务优先级队列可设置成如下表一所示,记录了任务执行的先后顺序和每个任务对应的EST。其中,EST为0表示该任务为可独立执行的任务即不依赖于其它任务;EST为1表示该任务有一个依赖任务,即父任务;EST为2表示该任务有两个依次依赖的任务,依次类推。
表一
任务 |
EST |
任务0 |
0 |
任务1 |
0 |
任务2 |
0 |
任务3 |
1 |
任务4 |
2 |
任务5 |
5 |
……. |
…… |
步骤12、按照优先级顺序从所述任务优先级队列中选择任务为当前任务,并计算所述当前任务的资源使用率;
例如,根据上述表一所示的任务优先级队列,从任务0开始选择,并计算任务0的资源使用率。
步骤13、根据所述当前任务的资源使用率确定是否有剩余资源,若确定有剩余资源,则所需资源小于剩余资源的至少一个EST为零的任务作为当前任务;
例如,以上述步骤12中选择的任务0为例,如果通过计算任务0的资源利用率较小(例如为70%),则说明资源还有剩余,则按照优先级顺序继续从上述任务优先级队列中选择EST为0的任务作为下一个当前任务,例如任务1,并计算任务1执行所需的资源。若任务1所需资源小于剩余资源,则将任务1也作为当前任务。若资源还有剩余,则继续从上述任务优先级队列中选择下一个EST为0的任务,任务2,并计算任务2执行所需的资源,依次类推,直到所有当前任务的资源利用率总和接近或者达到100%。
另外,如果通过计算任务0的资源利用率为接近100%的设定值或者为100%,则确定已无剩余资源,则不再从任务优先级队列中选择其它任务作为当前任务。
步骤14、同时执行各所述当前任务;
例如,如果步骤13选择的当前任务包括任务0、任务1和任务2,则同时执行任务0、任务1和任务2。
步骤15、将各所述当前任务的各级子任务的EST减一,并返回执行从所述任务优先级队列中选择当前任务的操作。
如图1b所示,为上述表一所示的任务0、任务1、任务2、任务3、任务4和任务5之间的父子关系。如果执行的当前任务为任务0、任务1和任务2,则任务0对应的子任务包括任务3和任务5,则任务3和任务5的EST分别减一;任务1和任务2对应的子任务相同,均为任务4和任务5,则任务4的EST减2,任务5的EST再减2。使用上述计算得到的各任务的新的EST更新任务优先级队列,则最终得到的结果如下表二所示,任务3的EST为0,任务4的EST为0,任务5的EST为2。然后,在得到的表二的基础上,按照优先级顺序进一步选择未执行的任务作为当前任务,例如任务3,重复执行步骤12~15,直到任务优先级队列中的所有任务都执行完毕。
表二
任务 |
EST |
任务0 |
0 |
任务1 |
0 |
任务2 |
0 |
任务3 |
0 |
任务4 |
0 |
任务5 |
2 |
……. |
…… |
本实施例在从任务优先级队列中选择任务为当前任务后,并不立即执行,而是计算所述当前任务的资源使用率,若确定有剩余资源,则从所述任务优先级队列中选择所需资源小于剩余资源的至少一个EST为零的任务作为当前任务,同时执行各所述当前任务。因此,本发明实施例相对于现有技术,充分利用了集群的剩余资源,从而提高了任务执行效率。
示例性的,在上述实施例的基础上,所述创建任务优先级队列共有两种实施方式。
其中,第一种实现方式具体包括:
确定当前任务集群,计算所述当前任务集群中各任务的最长路径STL;其中,第j个任务的最长路径STLj为从入口任务执行到任务j执行所需的时间段;
确定所述当前任务集群的静态关键路径,所述静态关键路径为从入口任务到出口任务的最长路径;最长路径可能并不唯一,可以任选其一作为静态关键路径。
从所述静态关键路径中按照顺序选择第一个任务作为当前任务;
确定当前任务的EST;
根据当前任务的EST创建任务优先级队列;
确定所述当前任务是否为所述静态关键路径上的出口任务,若是则所述任务优先级队列创建完毕,若否,则从所述静态关键路径上选择下一个任务作为当前任务,返回执行确定当前任务的EST的操作。
其中,在上述第一种实现方式中,所述确定当前任务的EST具体包括:
如果所述当前任务为入口任务,则确定所述当前任务的EST为0;
或者,如果所述当前任务为非入口任务,则确定所述当前任务的父任务的EST,将父任务中最大的EST作为所述当前任务的EST。
进一步的,所述根据当前任务的EST创建任务优先级队列具体包括:
创建空的任务优先级队列;
如果所述当前任务的EST为0,则将所述当前任务插入到所述任务优先级队列的队尾,并把所述当前任务的EST减1;
如果所述当前任务的EST不为0,则确定所述当前任务的未进入任务优先级队列的父任务的STL+t,其中t为父任务执行的时间片,并按照STL+t由大到小的排序对父任务进行排序,选择第一个父任务及未进入任务优先队列的祖先任务为子图构建一个有向无环图,递归创建所述有向无环图对应的子任务优先级队列,并将所述子任务优先级队列插入到所述任务优先级队列的队尾,按照父任务排序直到处理完所有父任务,把所述当前任务的EST减1。
其中,第二种实现方式具体包括:
确定任务间的依赖关系;
根据所述依赖关系创建任务优先级队列,并确定各任务的EST。
具体的,以图1b为例,根据任务0、任务1、任务2、任务3、任务4和任务5之间的父子关系,可以确定任务执行的优先级顺序,即构成的优先级队列中如上述表一所示,或者如下述表三所示,进一步根据任务执行所依赖的父任务的个数来确定每个任务的EST。例如,对于任务5,其执行需要依赖任务0、任务1、任务2、任务3和任务4的结果,因此,将其EST定义为5,依次类推,不足一描述。
表三
任务 |
EST |
任务0 |
0 |
任务3 |
1 |
任务2 |
0 |
任务1 |
0 |
任务4 |
2 |
任务5 |
5 |
本实施例同样在从任务优先级队列中选择任务为当前任务后,并不立即执行,而是计算所述当前任务的资源使用率,若确定有剩余资源,则从所述任务优先级队列中选择所需资源小于剩余资源的至少一个EST为零的任务作为当前任务,同时执行各所述当前任务。因此,本发明实施例相对于现有技术,充分利用了集群的剩余资源,从而提高了任务执行效率。
实施例二
图2a为本发明实施例二提供的一种任务调度方法的流程示意图,本实施例与上述实施例的区别在于,本实施例是对上述创建任务优先级队列的第一种实现方式的详细描述。如图2a所示,具体包括如下步骤:
步骤21、将由网络状任务节点构成的任务集群作为当前任务集群,计算所述当前任务集群中每个任务的最长路径STL;其中,第j个任务的最长路径STLj为从入口任务执行到任务j执行所需的时间段;并计算所述当前任务集群的静态关键路径,所述静态关键路径为从入口任务到出口任务的最长路径;
例如,以图2b所示的任务集群为例,其构成的当前任务集群按照执行路径(即现有技术中分配的执行时间片)可表示任务1-任务2-任务4-任务0-任务3-任务5-任务6-任务7,并确定任务0的EST为0、任务1的EST为0、任务2的EST为0、任务3的EST为1、任务4的EST为2、任务5的EST为5、任务6的EST为3、任务7的EST为7。根据上述路径,可确定每个任务的最长路径STL。例如,任务0的最长路径STL0即为0(由于任务0位入口任务,无需等待即可直接执行)、任务1的最长路径STL1即为从任务0执行到任务1执行对应的时间端即为任务0执行对应的时间片、任务2的最长路径STL2即为从任务0执行到任务2执行对应的时间端即为任务0执行对应的时间片与任务1执行对应的时间片的加和,依次类推,可得任务4的最长路径STL4和任务5的最长路径STL5,不再一一描述。
其中,所述静态关键路径即为从入口任务到出口任务的最长路径,包括任务0-任务1-任务2-任务3-任务4-任务5-任务6-任务7中的所有任务。
步骤22、为当前任务集群创建空的任务优先级队列,将所述静态关键路径中的第一个任务作为当前任务;
步骤23、判断所述当前任务的EST是否为0,若是,则执行步骤24,若否,则执行步骤25;
例如,当当前任务任务为任务0时,由于任务0的EST为0,则执行步骤24;当当前任务为任务4时,由于任务4的EST为2,则执行步骤25。
步骤24、将当前任务插入所述任务优先级队列中,作为最后一个节点,并在所述当前任务集群中,将所述当前任务的EST减1,并执行步骤27;
步骤25、将所述当前任务的所有尚未进入所述任务优先级队列的父任务,按计算时间(STLj+tj)由大到小进行排序,形成所述当前任务的父任务队列;
其中,tj为低j个任务执行的时间片。
步骤26、判断父任务队列是否为空;
若否,则执行步骤27;若是,则执行步骤28。
步骤27、将所述父任务队列中的第一个父任务及其尚未进入任务优先队列的祖先节点为子图构建一个有向无环图,作为当前任务集群,返回执行步骤21,直至所述父任务队列为空;
例如,如图2c所示,任务5-任务6-任务7构成的有向无环图,并重新定义任务5EST为0、任务6EST为0和任务7的EST为2,返回执行步骤21,直到任务5、任务6和任务7均加入当前任务优先级队列的队尾。
步骤28、将父任务队列对应的各父任务优先级队列加入当前任务优先级队列的队尾,将当前任务的EST减1,并返回执行步骤29;
步骤29、判断所述当前任务是否为所述静态关键路径的最后一个任务;
若是,则执行步骤210;否则,执行步骤211。
步骤210、任务优先级队列创建完成;
步骤211、获取所述静态关键路径中的下一个任务作为当前任务,返回执行步骤23。
实施例三
图3为本发明实施例三提供的一种任务调度装置的结构示意图,如图3所示,包括:
任务队列创建模块31用于对于由网络状任务节点构成的任务集群,创建任务优先级队列;
任务选择模块32用于按照优先级顺序从所述任务优先级队列中选择任务为当前任务,并计算所述当前任务的资源使用率,根据所述当前任务的资源使用率确定是否有剩余资源,若确定有剩余资源,则从所述任务优先级队列中选择所需资源小于剩余资源的至少一个EST为零的任务作为当前任务;
任务执行模块33用于同时执行各所述当前任务,将各所述当前任务的各级子任务的EST减一,并返回执行从所述任务优先级队列中选择当前任务的操作。
示例性的,所述任务队列创建模块31具体包括:
第一确定单元311用于确定当前任务集群,计算所述当前任务集群中各任务的最长路径STL;其中,第j个任务的最长路径STLj为从入口任务执行到任务j执行所需的时间段,确定所述当前任务集群的静态关键路径,所述静态关键路径为从入口任务到出口任务的最长路径;
选择单元312用于从所述静态关键路径中按照顺序选择第一个任务作为当前任务;
第二确定单元313用于确定当前任务的EST,所述EST为任务被分配执行的时间点;
创建单元314用于根据当前任务的EST创建任务优先级队列;
第三确定单元315用于确定所述前任务是否为所述静态关键路径上的出口任务,若是则所述任务优先级队列创建完毕,若否,则返回所述选择单元312。
示例性的,所述第二确定单元313具体用于如果所述当前任务为入口任务,则确定所述当前任务的EST为0;或者,如果所述当前任务为非入口任务,则确定所述当前任务的父任务的EST,将父任务中最大的EST作为所述当前任务的EST。
示例性的,所述创建单元314具体用于创建空的任务优先级队列;如果所述当前任务的EST为0,则将所述当前任务插入到所述任务优先级队列的队尾,并把所述当前任务的EST减1;如果所述当前任务的EST不为0,则确定所述当前任务的未进入任务优先级队列的父任务的STL+t,其中t为父任务执行的时间片,并按照STL+t由大到小的排序对父任务进行排序,选择第一个父任务及未进入任务优先队列的祖先节点为子图构建一个有向无环图,递归创建所述有向无环图对应的子任务优先级队列,并将所述子任务优先级队列插入到所述任务优先级队列的队尾,按照父任务排序直到处理完所有父任务,把所述当前任务的EST减1。
示例性的,所述任务队列创建模块33具体用于确定任务间的依赖关系;根据所述依赖关系创建任务优先级队列,并确定各任务的EST。
本实施例所述的任务调度装置用于执行实施例一至实施例二所述的任务调度方法,其技术原理和产生的技术效果类似,这里不再累述。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。