掌桥专利:专业的专利平台
掌桥专利
首页

一种任务的调度方法和装置

文献发布时间:2023-06-19 09:46:20


一种任务的调度方法和装置

技术领域

本申请涉及计算机领域,尤其涉及一种任务的调度方法和装置。

背景技术

在Java体系中,提供了ForkJoinPool和CompleteFuture框架来实现多任务的调度。而ForkJoinPool和CompleteFuture都是通过编写代码来编排任务的。对于任务数量、任务依赖是动态的场景,并无法友好处理,灵活性较低。即便是任务数量和任务依赖较为固定的场景,编写代码的过程也会浪费较多的时间,影响任务调度的效率。

针对上述的问题,目前尚未提出有效的解决方案。

发明内容

本申请提供了一种任务的调度方法和装置,以至少解决相关技术中任务的调度效率较低的技术问题。

根据本申请实施例的一个方面,提供了一种任务的调度方法,包括:

根据待执行的多个任务和所述多个任务之间的依赖关系生成所述多个任务对应的调度关系图;

根据所述调度关系图设置所述多个任务中每个任务对应的任务线程的调度参数,其中,所述调度参数用于控制所述调度参数对应的任务线程的执行时机;

将具有对应关系的任务线程和调度参数提交到线程池中,其中,所述线程池用于根据每个任务线程对应的调度参数执行所述每个任务线程。

可选地,根据待执行的多个任务和所述多个任务之间的依赖关系生成所述多个任务对应的调度关系图包括:

根据待执行的多个任务和所述多个任务之间的依赖关系生成所述多个任务对应的依赖关系图;

根据所述依赖关系图生成所述调度关系图。

可选地,根据待执行的多个任务和所述多个任务之间的依赖关系生成所述多个任务对应的依赖关系图包括:

遍历所述多个任务中的每个任务作为第一任务节点;

从所述多个任务的依赖关系中获取依赖所述第一任务节点的任务作为第二任务节点;

添加从第二任务节点指向第一任务节点的边作为所述第一任务节点与所述第二任务节点之间的依赖关系,得到所述依赖关系图。

可选地,遍历所述多个任务中的每个任务作为第一任务节点包括:遍历所述多个任务中的每个任务作为第一任务;检测是否已创建所述第一任务对应的任务节点;在检测出未创建所述第一任务对应的任务节点时,创建所述第一任务节点;在检测出已创建所述第一任务对应的任务节点时,将已创建的所述第一任务对应的任务节点确定为所述第一任务节点;

从所述多个任务的依赖关系中获取依赖所述第一任务节点的任务作为第二任务节点包括:从所述多个任务的依赖关系中获取依赖所述第一任务节点的第二任务;检测是否已创建所述第二任务对应的任务节点;在检测出未创建所述第二任务对应的任务节点时,创建所述第二任务节点;在检测出已创建所述第二任务对应的任务节点时,将已创建的所述第二任务对应的任务节点确定为所述第二任务节点。

可选地,根据所述依赖关系图生成所述调度关系图包括:

将所述依赖关系图中的任务节点划分为多个层,其中,无指出边的任务节点位于所述多个层的顶层,所述多个层中除所述顶层外的其他层仅与所述其他层以上的层具有依赖关系;

删除跨越至少一层的边;

将相邻两层之间的边转换为由被依赖的任务节点指向依赖的任务节点的边作为两个任务节点之间的调度关系,得到所述调度关系图。

可选地,根据所述调度关系图设置所述每个任务对应的任务线程的调度参数包括:

从所述调度关系图中获取所述每个任务对应的入度值,其中,所述入度值用于指示指入所述每个任务对应的任务节点的边的数量,所述调度关系图中的任务节点与所述多个任务一一对应,所述调度关系图中连接任务节点的边从被依赖的任务节点指向依赖的任务节点;

将所述入度值确定为所述每个任务对应的任务线程的调度参数。

可选地,在将具有对应关系的任务线程和调度参数提交到线程池中之后,所述方法还包括:

检测所述每个任务线程对应的所述调度参数是否为目标值,其中,所述调度参数为所述目标值表示对应的任务线程不依赖其他任务线程,或者,对应的任务线程所依赖的任务线程均运行完成;

在检测到目标任务线程对应的所述调度参数为所述目标值时,从所述调度关系图中获取所述目标任务线程对应的前置节点;

在获取到所述前置节点时,将所述前置节点对应的任务线程的运行结果输入所述目标任务线程;

在未获取到所述前置节点时,或者,将所述前置节点对应的任务线程的运行结果输入所述目标任务线程之后,运行所述目标任务线程;

从所述调度关系图中获取所述目标任务线程对应的后置节点;

调整所述后置节点对应的调度参数,以指示所述目标任务线程运行完成。

根据本申请实施例的另一方面,还提供了一种任务的调度装置,包括:

生成模块,用于根据待执行的多个任务和所述多个任务之间的依赖关系生成所述多个任务对应的调度关系图;

设置模块,用于根据所述调度关系图设置所述多个任务中每个任务对应的任务线程的调度参数,其中,所述调度参数用于控制所述调度参数对应的任务线程的执行时机;

提交模块,用于将具有对应关系的任务线程和调度参数提交到线程池中,其中,所述线程池用于根据每个任务线程对应的调度参数执行所述每个任务线程。

根据本申请实施例的另一方面,还提供了一种存储介质,该存储介质包括存储的程序,程序运行时执行上述的方法。

根据本申请实施例的另一方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器通过计算机程序执行上述的方法。

在本申请实施例中,采用根据待执行的多个任务和多个任务之间的依赖关系生成多个任务对应的调度关系图;根据调度关系图设置多个任务中每个任务对应的任务线程的调度参数,其中,调度参数用于控制调度参数对应的任务线程的执行时机;将具有对应关系的任务线程和调度参数提交到线程池中,其中,线程池用于根据每个任务线程对应的调度参数执行每个任务线程的方式,通过生成多个任务对应的调度关系图来体现出多个任务之间的依赖关系对任务调度过程的影响,根据生成的调度关系图为各个任务线程设置调度参数来控制对应的任务线程的执行时机,在向线程池提交任务时将具有对应关系的任务线程和调度参数一同提交,使得线程池能够根据每个任务线程对应的调度参数执行每个任务线程,达到了灵活调度任务的目的,从而实现了提高任务的调度效率的技术效果,进而解决了相关技术中任务的调度效率较低的技术问题。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1是根据本申请实施例的任务的调度方法的硬件环境的示意图;

图2是根据本申请实施例的一种可选的任务的调度方法的流程图;

图3是根据本申请实施例的一种可选的依赖关系图的示意图;

图4是根据本申请实施例的一种可选的调度关系图的示意图;

图5是根据本申请可选的实施方式的一种任务的调度过程的示意图;

图6是根据本申请可选的实施方式的一种任务线程执行过程的示意图;

图7是根据本申请实施例的一种可选的任务的调度装置的示意图;

图8是根据本申请实施例的一种电子装置的结构框图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

根据本申请实施例的一方面,提供了一种任务的调度的方法实施例。

可选地,在本实施例中,上述任务的调度方法可以应用于如图1所示的由终端101和服务器103所构成的硬件环境中。如图1所示,服务器103通过网络与终端101进行连接,可用于为终端或终端上安装的客户端提供服务(如游戏服务、应用服务等),可在服务器上或独立于服务器设置数据库,用于为服务器103提供数据存储服务,上述网络包括但不限于:广域网、城域网或局域网,终端101并不限定于PC、手机、平板电脑等。本申请实施例的任务的调度方法可以由服务器103来执行,也可以由终端101来执行,还可以是由服务器103和终端101共同执行。其中,终端101执行本申请实施例的任务的调度方法也可以是由安装在其上的客户端来执行。

图2是根据本申请实施例的一种可选的任务的调度方法的流程图,如图2所示,该方法可以包括以下步骤:

步骤S202,根据待执行的多个任务和所述多个任务之间的依赖关系生成所述多个任务对应的调度关系图;

步骤S204,根据所述调度关系图设置所述多个任务中每个任务对应的任务线程的调度参数,其中,所述调度参数用于控制所述调度参数对应的任务线程的执行时机;

步骤S206,将具有对应关系的任务线程和调度参数提交到线程池中,其中,所述线程池用于根据每个任务线程对应的调度参数执行所述每个任务线程。

通过上述步骤S202至步骤S206,通过生成多个任务对应的调度关系图来体现出多个任务之间的依赖关系对任务调度过程的影响,根据生成的调度关系图为各个任务线程设置调度参数来控制对应的任务线程的执行时机,在向线程池提交任务时将具有对应关系的任务线程和调度参数一同提交,使得线程池能够根据每个任务线程对应的调度参数执行每个任务线程,达到了灵活调度任务的目的,从而实现了提高任务的调度效率的技术效果,进而解决了相关技术中任务的调度效率较低的技术问题。

可选地,在本实施例中,任务的调度方法可以但不限于应用于具有任务调度功能的程序、工具、插件等。比如:可以实现一个程序或者插件,通过RESTful API方式对外提供任务调度的服务。

在步骤S202提供的技术方案中,依赖关系用于表示任务之间初始参数和执行结果之间的关系。比如:任务1和任务2之间具有依赖关系:任务1依赖于任务2,也可以说任务2被任务1所依赖,可以表示任务1的一个或者多个初始参数是任务2的某个或者某几个执行结果。

例如:多个任务和多个任务之间的依赖关系可以通过表格的形式来呈现,多个任务包括任务A、B、C、D,多个任务之间的依赖关系包括:任务C依赖任务A和B,任务D依赖任务B和C,可以得到如表1所示的任务依赖关系的表格。

表1

可选地,在本实施例中,调度关系图可以但不限于采用DAG(Directed AcyclicGraph,有向无环图)的形式绘制。

作为一种可选的实施例,可以但不限于采用以下方式生成多个任务对应的调度关系图:

S11,根据待执行的多个任务和所述多个任务之间的依赖关系生成所述多个任务对应的依赖关系图;

S12,根据所述依赖关系图生成所述调度关系图。

可选地,在本实施例中,可以首先通过DAG将多个任务间的依赖关系展示出来得到依赖关系图,然后再将依赖关系图中展示的依赖关系转换为任务间的调度关系,从而生成调度关系图。

作为一种可选的实施例,可以但不限于采用以下方式生成依赖关系图:

S21,遍历所述多个任务中的每个任务作为第一任务节点;

S22,从所述多个任务的依赖关系中获取依赖所述第一任务节点的任务作为第二任务节点;

S23,添加从第二任务节点指向第一任务节点的边作为所述第一任务节点与所述第二任务节点之间的依赖关系,得到所述依赖关系图。

可选地,在本实施例中,将多个任务中的每个任务作为一个任务节点添加到依赖关系图上,任务之间的依赖关系可以但不限于通过节点之间的有向连接来表示(比如箭头)。

例如:遍历上述表1中记载的各个任务,首先可能得到任务A,生成任务A对应的A节点,由于任务A没有依赖的任务,则继续遍历下一个任务,可能得到任务B,生成任务B对应的B节点,由于任务B没有依赖的任务,则继续遍历下一个任务,可能得到任务C,生成任务C对应的C节点,由于任务C依赖于任务A和任务B,首先将A节点作为的第二任务节点,添加从C节点指向A节点的边,再将B节点作为的第二任务节点,添加从C节点指向B节点的边,然后继续遍历下一个任务,得到任务D,由于任务D依赖于任务B和任务C,首先将B节点作为的第二任务节点,添加从D节点指向B节点的边,再将C节点作为的第二任务节点,添加从D节点指向C节点的边。图3是根据本申请实施例的一种可选的依赖关系图的示意图,经过上述依赖关系图的生成过程生成了依赖关系图,如图3所示,实线的箭头表示了任务C依赖于任务A和任务B,任务D依赖于任务B和任务C。

作为一种可选的实施例,遍历所述多个任务中的每个任务作为第一任务节点包括:

S31,遍历所述多个任务中的每个任务作为第一任务;

S32,检测是否已创建所述第一任务对应的任务节点;

S33,在检测出未创建所述第一任务对应的任务节点时,创建所述第一任务节点;

S34,在检测出已创建所述第一任务对应的任务节点时,将已创建的所述第一任务对应的任务节点确定为所述第一任务节点。

可选地,在本实施例中,遍历多个任务中的每个任务作为第一任务的过程中可以通过对当前创建的任务节点的检测来确定是否需要创建新的任务节点,如果已创建了第一任务对应的任务节点,则不必创建新的节点,如果没有创建第一任务对应的任务节点,则创建新的节点作为第一任务节点,从而使得每个第一任务在依赖关系图中有且只有一个对应的任务节点。

作为一种可选的实施例,从所述多个任务的依赖关系中获取依赖所述第一任务节点的任务作为第二任务节点包括:

S41,从所述多个任务的依赖关系中获取依赖所述第一任务节点的第二任务;

S42,检测是否已创建所述第二任务对应的任务节点;

S43,在检测出未创建所述第二任务对应的任务节点时,创建所述第二任务节点;

S44,在检测出已创建所述第二任务对应的任务节点时,将已创建的所述第二任务对应的任务节点确定为所述第二任务节点。

可选地,在本实施例中,在遍历第一任务节点所具有的依赖关系的过程中,可以通过对当前创建的任务节点的检测来确定是否需要创建新的任务节点,如果已创建了第二任务对应的任务节点,则不必创建新的节点,可以直接在第一任务节点和第二任务节点之间添加依赖关系,如果没有创建第二任务对应的任务节点,则创建新的节点作为第二任务节点后再添加节点之间的依赖关系,从而使得每个第二任务在依赖关系图中有且只有一个对应的任务节点。

可选地,在本实施例中,通过上述遍历过程中的检测过程能够确保多个任务中每个任务在依赖关系图中有且只有一个对应的任务节点,使得依赖关系图的展示更加简洁准确。

作为一种可选的实施例,可以但不限于采用以下方式生成调度关系图:

S51,将所述依赖关系图中的任务节点划分为多个层,其中,无指出边的任务节点位于所述多个层的顶层,所述多个层中除所述顶层外的其他层仅与所述其他层以上的层具有依赖关系;

S52,删除跨越至少一层的边;

S53,将相邻两层之间的边转换为由被依赖的任务节点指向依赖的任务节点的边作为两个任务节点之间的调度关系,得到所述调度关系图。

可选地,在本实施例中,将DAG图中的依赖关系转换成调度关系,调度关系图中的边表示了任务之间执行的顺序。

可选地,在本实施例中,由于跨越至少一层的边所连接的两个任务中较下层的任务执行时较上层的任务一定已经执行完了,因此可以将跨越至少一层的边删除,不表示出这样的两个任务之间的调度关系。

例如:图4是根据本申请实施例的一种可选的调度关系图的示意图,如图4所示,A节点、B节点、C节点和D节点被划分为三个层,其中,由于A节点和B节点不具有依赖关系,因此可以将A节点和B节点视作顶层,C节点位于第二层,D节点位于第三层。由D节点指向B节点的边由于跨越了一个层,可以被删除。由C节点指向A节点的实线边转换为由A节点指向C节点的虚线边,由C节点指向B节点的实线边转换为由B节点指向C节点的虚线边,由D节点指向C节点的实线边转换为由C节点指向D节点的虚线边。

在上述任务执行过程中,任务A和任务B没有依赖其他任务,并且没有相互依赖,那么A和B会先并发执行。当任务A和任务B执行完成后,任务C开始执行。因为任务D依赖任务C,所以当任务C完成后任务D开始执行。

在步骤S204提供的技术方案中,调度参数可以但不限于包括:CountDownLatch参数,其用于控制对应的任务线程的执行时机。

作为一种可选的实施例,可以但不限于采用以下方式设置每个任务线程的调度参数:

S61,从所述调度关系图中获取所述每个任务对应的入度值,其中,所述入度值用于指示指入所述每个任务对应的任务节点的边的数量,所述调度关系图中的任务节点与所述多个任务一一对应,所述调度关系图中连接任务节点的边从被依赖的任务节点指向依赖的任务节点;

S62,将所述入度值确定为所述每个任务对应的任务线程的调度参数。

可选地,在本实施例中,入度值用于指示指入所述每个任务对应的任务节点的边的数量,比如:如图4所示,节点A和节点B的入度值均为0,节点C的入度值为2,节点D的入度值为1。

在一个可选的实施方式中,提供了一种任务的调度过程。图5是根据本申请可选的实施方式的一种任务的调度过程的示意图,如图5所示,当请求执行任务调度时,创建DAG对象,程序遍历所有任务信息,并依次将任务(记为M)作为节点(node)插入到DAG中。然后再遍历任务的依赖任务(记为N),将任务M和任务N的关系作为边(edge)更新到DAG中。这样,遍历所有任务后,将生成所有任务的完整DAG视图,就得到了依赖关系图,将依赖关系图中的依赖关系转换为调度关系,即得到调度关系图DAG。

然后遍历调度关系图DAG的所有节点(node),将节点的入度值设置为该节点CountDownLatch的值。然后将所有节点任务提交给线程池执行。

在步骤S206提供的技术方案中,在提交任务线程到线程池中的同时,将任务线程对应的调度参数以提交到线程池中,线程池能够根据每个任务线程对应的调度参数确定每个任务线程的执行时机,从而调度每个任务线程的执行。

作为一种可选的实施例,在将具有对应关系的任务线程和调度参数提交到线程池中之后,还包括:

S71,检测所述每个任务线程对应的所述调度参数是否为目标值,其中,所述调度参数为所述目标值表示对应的任务线程不依赖其他任务线程,或者,对应的任务线程所依赖的任务线程均运行完成;

S72,在检测到目标任务线程对应的所述调度参数为所述目标值时,从所述调度关系图中获取所述目标任务线程对应的前置节点;

S73,在获取到所述前置节点时,将所述前置节点对应的任务线程的运行结果输入所述目标任务线程;

S74,在未获取到所述前置节点时,或者,将所述前置节点对应的任务线程的运行结果输入所述目标任务线程之后,运行所述目标任务线程;

S75,从所述调度关系图中获取所述目标任务线程对应的后置节点;

S76,调整所述后置节点对应的调度参数,以指示所述目标任务线程运行完成。

可选地,在本实施例中,调度参数为目标值表示对应的任务线程不依赖其他任务线程,或者,对应的任务线程所依赖的任务线程均运行完成。通过对调度参数的检测能够确定每个任务线程执行的时机,当任务线程的调度参数为目标值时,表示该任务线程具备了执行的条件,可以被执行。

可选地,在本实施例中,上述目标值可以但不限于为0。即每个调度参数倒数至0时即为该调度参数对应的任务线程的执行时机。

可选地,在本实施例中,目标任务线程对应的前置节点可以理解为执行该目标任务线程所依赖的任务线程的节点,比如:如图4所示,C节点的前置节点为A节点和B节点。

可选地,在本实施例中,目标任务线程对应的后置节点可以理解为依赖该目标任务线程的执行结果的任务线程的节点,比如:如图4所示,C节点的后置节点为D节点。调整后置节点对应的调度参数的方式可以但不限于为将后置节点的调度参数减少1,即表示目标任务线程运行完成。

在上述可选的实施方式中,提供了一种任务线程执行过程。图6是根据本申请可选的实施方式的一种任务线程执行过程的示意图,如图6所示,调用CountDownLatch的wait方法来监控每个任务节点的CountDownLatch的值,判断CountDownLatch的值是否为0,如果否,则继续等待。如果是,则遍历该任务的所有前置节点,将前置节点的执行结果作为参数传递到该任务中,执行该任务后,遍历所有该任务的后置节点,调用后置节点的countDown方法调整后置节点的CountDownLatch的值。

对于没有依赖任务的任务节点,因为入度为0,比如:图4所示的A节点和B节点,任务线程不会被CountDownLatch阻塞,直接执行。当任务执行完成,会减小出度节点(即后置节点)的CountDownLatch,所以当任务A和B执行完成时,C的CountDownLatch值减小为0,线程继续执行,依此类推。

需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台电子设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例所述的方法。

根据本申请实施例的另一个方面,还提供了一种用于实施上述任务的调度方法的任务的调度装置。图7是根据本申请实施例的一种可选的任务的调度装置的示意图,如图7所示,该装置可以包括:

生成模块72,用于根据待执行的多个任务和所述多个任务之间的依赖关系生成所述多个任务对应的调度关系图;

设置模块74,用于根据所述调度关系图设置所述多个任务中每个任务对应的任务线程的调度参数,其中,所述调度参数用于控制所述调度参数对应的任务线程的执行时机;

提交模块76,用于将具有对应关系的任务线程和调度参数提交到线程池中,其中,所述线程池用于根据每个任务线程对应的调度参数执行所述每个任务线程。

需要说明的是,该实施例中的生成模块72可以用于执行本申请实施例中的步骤S202,该实施例中的设置模块74可以用于执行本申请实施例中的步骤S204,该实施例中的提交模块76可以用于执行本申请实施例中的步骤S206。

此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现。

通过上述模块,通过生成多个任务对应的调度关系图来体现出多个任务之间的依赖关系对任务调度过程的影响,根据生成的调度关系图为各个任务线程设置调度参数来控制对应的任务线程的执行时机,在向线程池提交任务时将具有对应关系的任务线程和调度参数一同提交,使得线程池能够根据每个任务线程对应的调度参数执行每个任务线程,达到了灵活调度任务的目的,从而实现了提高任务的调度效率的技术效果,进而解决了相关技术中任务的调度效率较低的技术问题。

作为一种可选的实施例,所述生成模块包括:

第一生成单元,用于根据待执行的多个任务和所述多个任务之间的依赖关系生成所述多个任务对应的依赖关系图;

第二生成单元,用于根据所述依赖关系图生成所述调度关系图。

作为一种可选的实施例,所述第一生成单元用于:

遍历所述多个任务中的每个任务作为第一任务节点;

从所述多个任务的依赖关系中获取依赖所述第一任务节点的任务作为第二任务节点;

添加从第二任务节点指向第一任务节点的边作为所述第一任务节点与所述第二任务节点之间的依赖关系,得到所述依赖关系图。

作为一种可选的实施例,所述第一生成单元用于:

遍历所述多个任务中的每个任务作为第一任务;检测是否已创建所述第一任务对应的任务节点;在检测出未创建所述第一任务对应的任务节点时,创建所述第一任务节点;在检测出已创建所述第一任务对应的任务节点时,将已创建的所述第一任务对应的任务节点确定为所述第一任务节点;

从所述多个任务的依赖关系中获取依赖所述第一任务节点的第二任务;检测是否已创建所述第二任务对应的任务节点;在检测出未创建所述第二任务对应的任务节点时,创建所述第二任务节点;在检测出已创建所述第二任务对应的任务节点时,将已创建的所述第二任务对应的任务节点确定为所述第二任务节点。

作为一种可选的实施例,所述第二生成单元用于:

将所述依赖关系图中的任务节点划分为多个层,其中,无指出边的任务节点位于所述多个层的顶层,所述多个层中除所述顶层外的其他层仅与所述其他层以上的层具有依赖关系;

删除跨越至少一层的边;

将相邻两层之间的边转换为由被依赖的任务节点指向依赖的任务节点的边作为两个任务节点之间的调度关系,得到所述调度关系图。

作为一种可选的实施例,所述设置模块包括:

获取单元,用于从所述调度关系图中获取所述每个任务对应的入度值,其中,所述入度值用于指示指入所述每个任务对应的任务节点的边的数量,所述调度关系图中的任务节点与所述多个任务一一对应,所述调度关系图中连接任务节点的边从被依赖的任务节点指向依赖的任务节点;

确定单元,用于将所述入度值确定为所述每个任务对应的任务线程的调度参数。

作为一种可选的实施例,所述装置还包括:

检测模块,用于在将具有对应关系的任务线程和调度参数提交到线程池中之后,检测所述每个任务线程对应的所述调度参数是否为目标值,其中,所述调度参数为所述目标值表示对应的任务线程不依赖其他任务线程,或者,对应的任务线程所依赖的任务线程均运行完成;

第一获取模块,用于在检测到目标任务线程对应的所述调度参数为所述目标值时,从所述调度关系图中获取所述目标任务线程对应的前置节点;

输入模块,用于在获取到所述前置节点时,将所述前置节点对应的任务线程的运行结果输入所述目标任务线程;

运行模块,用于在未获取到所述前置节点时,或者,将所述前置节点对应的任务线程的运行结果输入所述目标任务线程之后,运行所述目标任务线程;

第二获取模块,用于从所述调度关系图中获取所述目标任务线程对应的后置节点;

调整模块,用于调整所述后置节点对应的调度参数,以指示所述目标任务线程运行完成。

此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。

根据本申请实施例的另一个方面,还提供了一种用于实施上述任务的调度方法的电子装置。

图8是根据本申请实施例的一种电子装置的结构框图,如图8所示,该电子装置可以包括:一个或多个(图中仅示出一个)处理器801、存储器803、以及传输装置805,如图8所示,该电子装置还可以包括输入输出设备807。

其中,存储器803可用于存储软件程序以及模块,如本申请实施例中的任务的调度方法和装置对应的程序指令/模块,处理器801通过运行存储在存储器803内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的任务的调度方法。存储器803可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器803可进一步包括相对于处理器801远程设置的存储器,这些远程存储器可以通过网络连接至电子装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

上述的传输装置805用于经由一个网络接收或者发送数据,还可以用于处理器与存储器之间的数据传输。上述的网络具体实例可包括有线网络及无线网络。在一个实例中,传输装置805包括一个网络适配器(Network Interface Controller,NIC),其可通过网线与其他网络设备与路由器相连从而可与互联网或局域网进行通讯。在一个实例中,传输装置805为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。

其中,具体地,存储器803用于存储应用程序。

处理器801可以通过传输装置805调用存储器803存储的应用程序,以执行下述步骤:

根据待执行的多个任务和所述多个任务之间的依赖关系生成所述多个任务对应的调度关系图;

根据所述调度关系图设置所述多个任务中每个任务对应的任务线程的调度参数,其中,所述调度参数用于控制所述调度参数对应的任务线程的执行时机;

将具有对应关系的任务线程和调度参数提交到线程池中,其中,所述线程池用于根据每个任务线程对应的调度参数执行所述每个任务线程。

采用本申请实施例,提供了一种任务的调度的方案。通过生成多个任务对应的调度关系图来体现出多个任务之间的依赖关系对任务调度过程的影响,根据生成的调度关系图为各个任务线程设置调度参数来控制对应的任务线程的执行时机,在向线程池提交任务时将具有对应关系的任务线程和调度参数一同提交,使得线程池能够根据每个任务线程对应的调度参数执行每个任务线程,达到了灵活调度任务的目的,从而实现了提高任务的调度效率的技术效果,进而解决了相关技术中任务的调度效率较低的技术问题。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。

本领域普通技术人员可以理解,图8所示的结构仅为示意,电子装置可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等电子设备。图8其并不对上述电子装置的结构造成限定。例如,电子装置还可包括比图8中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图8所示不同的配置。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令电子设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。

本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行任务的调度方法的程序代码。

可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。

可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:

根据待执行的多个任务和所述多个任务之间的依赖关系生成所述多个任务对应的调度关系图;

根据所述调度关系图设置所述多个任务中每个任务对应的任务线程的调度参数,其中,所述调度参数用于控制所述调度参数对应的任务线程的执行时机;

将具有对应关系的任务线程和调度参数提交到线程池中,其中,所述线程池用于根据每个任务线程对应的调度参数执行所述每个任务线程。

可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。

可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

相关技术
  • 一种任务调度系统、任务调度和调度任务配置方法及装置
  • 任务调度控制方法、任务调度器及任务处理装置
技术分类

06120112293140