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

并行任务调度方法、装置、计算机设备和存储介质

文献发布时间:2023-06-19 11:32:36


并行任务调度方法、装置、计算机设备和存储介质

技术领域

本发明实施例涉及数据处理技术领域,尤其涉及一种并行任务调度方法、装置、计算机设备和存储介质。

背景技术

随着计算机技术的发展,现代计算机的处理器逐渐变为多核心处理器,多核处理器可以对任务进行并行处理,计算机的处理性能得到极大的提升。但是目前互联网行业中处理的信息量较大,这些信息往往需要分别存储在不同的数据库以及不同的数据表。然而现有技术中对上述情况数据的处理存在以下技术问题:

1)计算机采用全量表进行顺序检索,这导致计算机的多核心特性浪费,多核处理器未同时处于工作状态,降低了数据的处理效率;2)计算机采用多线程技术实现并行查询,然而由于目前通用的线程调度规则为一维线性执行,对于数据存储在不同数据库不同数据表的多维数据存储情况,多线程任务的编写复杂,任务同步执行过程难以控制。

发明内容

本发明提供一种并行任务调度方法、装置、计算机设备和存储介质,以使用多个线程同时执行任务,提高任务的执行效率,降低多数据源情况下的任务编写难度,提高任务同步执行过程的可控性。

第一方面,本发明实施例提供了一种并行任务调度方法,该方法包括:

根据并行任务的计算维度信息确定至少一个执行子任务;

基于各处理器的当前工作状态为各所述处理器创建核心执行线程以及对应所述核心执行线程的任务分配队列;

按照预设规则分配各所述执行子任务到各所述任务分配队列;

控制各所述核心执行线程处理对应任务分配队列中的执行子任务。

第二方面,本发明实施例还提供了一种并行任务调度装置,该装置包括:

子任务模块,用于根据并行任务的计算维度信息确定至少一个执行子任务;

执行线程模块,用于基于各处理器的当前工作状态为各所述处理器创建核心执行线程以及对应所述核心执行线程的任务分配队列;

任务分配模块,用于按照预设规则分配各所述执行子任务到各所述任务分配队列;

任务执行模块,用于控制各所述核心执行线程处理对应任务分配队列中的执行子任务。

第三方面,本发明实施例还提供了一种计算机设备,该计算机设备包括:

一个或多个处理器;

存储器,用于存储一个或多个程序,

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例中任一所述的并行任务调度方法。

第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如本发明实施例中任一所述的并行任务调度方法。

本发明实施例,通过按照预设的计算维度信息将并行任务拆分为至少一个执行子任务,根据各处理器的当前工作状态为处理器创建核心执行线程以及核心执行线程的任务分配队列,将各执行子任务分配到各任务分配队列,控制各核心执行线程处理各自任务分配队列中的执行子任务,实现了多维的核心执行线程,充分利用多核处理器特性,使得各处理器分别基于一个核心执行线程处理调度任务,可提高调度任务的执行效率,采用多维的核心执行线程处理多数据源的调度,核心执行线程贴合多数据源的场景,使得任务可以按照数据源进行划分,降低任务的编写难度,可提高任务执行过程中的可控性。

附图说明

图1是本发明实施例一提供的一种并行任务调度方法的流程图;

图2是本发明实施例二提供的另一种并行任务调度方法的流程图;

图3是本发明实施例二提供的一种并行任务调度方法的示例图;

图4是本发明实施例三提供的一种并行任务调度装置的结构示意图;

图5是本发明实施例四提供的一种计算机设备的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构,此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

实施例一

图1是本发明实施例一提供的一种并行任务调度方法的流程图,本实施例可适用于多数据源情景下的并行任务调度的情况,该方法可以由并行任务调度装置来执行,该装置可以采用硬件和/或软件的方式来实现,参见图1,本发明实施例提供的方法具体包括如下步骤:

步骤110、根据并行任务的计算维度信息确定至少一个执行子任务。

其中,并行任务可以待执行的调度任务,并行任务具体可以由一个或者多个原子任务组成的集合,例如,修改任务可以是检索原子任务和更新原子任务的集合,并行任务可以由一个或者多个处理器并行执行。计算信息维度可以是并行任务的处理过程中使用的属性维度,计算信息维度可以包括并行任务可拆分的原子任务的数量,还可以包括并行任务的数据源的数量等。执行子任务可以是被处理器执行的任务,执行子任务可以是由并行任务拆解获得。

在本发明实施例中,可以获取并行任务的计算维度信息,该计算维度信息可以由用户预先设定,也可以根据并行任务的属性信息自动分析生成。可以根据获取到的计算维度信息将并行任务划分为多个执行子任务,执行子任务中包括的原子任务可以对应原始的并行任务中的一个维度,例如,一个并行任务的数据源为A和B,且该并行任务中包括的原子任务为查询和更新,按照该并行任务的数据源和原子任务进行拆分,执行子任务可以为在A中查询、在A中更新、在B中查询和在B中更新等四个执行子任务。

步骤120、基于各处理器的当前工作状态为各处理器创建核心执行线程以及对应核心执行线程的任务分配队列。

其中,处理器可以是计算机设备中的运算和控制核心,可以是信息处理和程序运行的最终执行单元,处理器的数量可以为至少两个。当前工作状态可以是处理器执行数据处理的状态,可以包括处于工作状态以及处于空闲状态等,当前工作状态可以由处理器当前的负载情况确定。核心执行线程可以是用于处理执行子任务的线程,不同处理存在各自对应的核心执行线程,不同处理器中的核心执行线程的资源可以相互独立。任务分配队列可以与核心执行线程一一对应,任务分配队列中的任务可以按照存储时间由对应的核心执行线程顺序执行。

具体的,可以监测各处理器的工作状态,在需要执行各执行子任务时,可以获取当前时刻的各处理器的工作状态作为当前工作状态,可以将当前工作状态与阈值要求进行比较,在满足阈值要求的处理器中创建核心执行线程,并针对每个核心执行线程建立各自对应的任务分配队列,其中,阈值要求可以是判定处理器可以处理执行子任务的要求,可以包括处理器的线程数量以及处理器的剩余处理性能等负载。

步骤130、按照预设规则分配各执行子任务到各任务分配队列。

其中,预设规则可以是分配执行子任务的规则,可以预先设置。预设规则可以包括数量均衡分配执行子任务、数量不均衡分配执行子任务,按照处理器当前负载分配执行子任务,按照处理器的处理性能分配执行子任务等。

在本发明实施例中,在为处理器的核心执行线程创建任务分配队列后,可以将各执行子任务分配到各任务分配队列中,预设规则在此可以不进行限定,例如,可以按照处理器的负载情况分配执行任务队列到对应核心执行线程的任务分配队列中,处理器负载越大,越少执行子任务分配到对应任务分配队列,也可以数量均衡的将各执行子任务分配到各处理器的核心执行线程对应的任务分配队列中,每个处理器的核心执行线程的任务分配队列中分配相同数量的执行子任务,还可以根据处理器的处理性能,将各执行子任务分别到各处理器的核心执行线程的任务分配队列中,处理器的处理性能越高,分配到对应任务分配队列中的执行子任务的数量可以越多。

步骤140、控制各核心执行线程处理对应任务分配队列中的执行子任务。

具体的,处理器的核心执行线程可以每次从对应的任务分配队列中获取到一个执行子任务,该核心执行线程可以对该执行子任务进行计算获取到调度结果。可以理解的是,各处理器的核心执行线程处于并行执行状态,各执行子任务的处理互不影响。

本发明实施例,通过计算维度信息将并行任务拆分为至少一个执行子任务,按照各处理器的当前工作状态为处理器创建核心执行线程以及任务分配队列,其中,任务分配队列与核心执行线程一一对应,分配各执行子任务分配到各任务分配队列,控制核心执行线程处理各自任务分配队列中的执行子任务,实现了多维核心执行线程,充分利用多核处理器特性,提高调度任务的执行效率,采用多维核心执行线程处理多数据源的调度,降低任务的编写难度,可提高任务执行过程中的可控性。

实施例二

图2是本发明实施例二提供的另一种并行任务调度方法的流程图,本发明实施例是在上述发明实施例基础上的具体化,参见图2,本发明实施例提供的方法具体包括如下步骤:

步骤210、获取预先定义的并行任务以及并行任务的计算维度信息,其中,计算维度信息至少包括数据源信息和拆分任务信息。

其中,数据源信息可以是执行并行任务需要的数据源的信息,可以包括数据库信息以及数据表信息等,并行任务的数据源信息可以为一个或者多个,例如,并行任务的执行需要依赖于多个集群中不同数据库存储的信息。拆分任务信息可以是并行任务包含的原子任务的信息,例如,并行任务可以包括查询原子任务和更新原子任务等,拆分任务信息可以是查询原子任务以及更新原子任务的相关信息。

具体的,在处理并行任务之前,可以由用于定义并行任务的计算维度信息,可以通过操作命令输入或者通过脚本文件输入等,定义的计算维度信息可以包括数据源信息和拆分任务信息等。

步骤220、按照数据源信息和拆分任务信息将并行任务拆分为至少一个执行子任务。

在本发明实施例中,可以按照预先定义的数据源信息和拆分任务信息将并行任务进行拆分,拆分后的每个执行子任务可以仅对应一个数据源信息以及一个查封任务信息。

步骤230、获取各处理器的运行负载作为当前工作状态。

其中,运行负载可以是表示处理器当前状态的信息,运行负载可以包括中央处理器(Central Processing Unit,CPU)利用率和连接线程数量等。

在本发明实施例中可以对用于处理并行任务的各个处理器的性能进行监测,可以将当前时刻各处理器的CPU利用率和连接线程数量等信息作为当前工作状态。

步骤240、将运行负载小于或等于负载阈值的处理器记为执行处理器。

其中,负载阈值可以是判断处理器可以进行并行任务处理的临界负载,当处理器的运行负载小于或等于该负载阈值时,可以认为该处理器可以用于进行并行任务的处理。执行处理器可以是所有处理器中被选定为处理并行任务的处理器,执行处理器可以在物理意义或者逻辑意义上被标记,例如,对处理器的标识号进行标识,实现物理意义上的记为执行处理器,或者,将运行负载小于负载阈值的处理器作为执行处理器,实现逻辑意义上的记为执行处理器。

具体的,可以将各处理器的运行负载与负载阈值进行比较,若处理器的运行负载小于或等于负载阈值,则将该处理器作为执行处理器,若处理器的运行负载大于负载阈值,可以说明处理器处于高负荷状态,没有多余的算力用于处理并行任务。可以理解的是,负载阈值的取值可以通过预设设定或者根据实际情况动态设定,例如,在夜晚可以将负载阈值的取值设置为一个较大的数值,以使用较空闲的处理器执行并行任务,或者,在温度较高时,将负载阈值的取值设置为一个较小的数值,使用算力较高的处理器执行并行任务。

步骤250、为执行处理器创建核心执行线程以及创建对应核心执行线程的任务分配队列。

在本发明实施例中,可以针对每个执行处理器创建各自对应的核心执行线程,各核心执行线程之间互不影响,并且可以为每个核心执行线程创建各自的任务分配队列,任务分配队列中的任务仅由对应的核心执行线程处理。

步骤260、为各执行子任务创建唯一标识信息;将各唯一标识信息随机分配到各任务分配队列。

其中,唯一标识信息可以是标识执行子任务队列的信息,例如,UID或者任务名等,不同执行子任务的唯一标识信息可以不同。

具体的,可以为各执行子任务设置一个唯一标识信息,可以将这些唯一标识信息以乱序的方式随机分配到各任务分配队列中,每个任务分配队列中的唯一标识信息的数量可以相同也可以不同,例如,可以根据任务分配队列对应核心执行线程的处理能力分配不同数量的唯一标识信息。

进一步的,在上述发明实施例的基础上,所述唯一标识信息以坐标形式表示,其中,坐标中元素分别代表执行子任务对应的数据源和拆分任务。

在本发明实施例中,执行子任务的唯一标识信息可以为坐标信息,每个坐标代表该执行子任务所属的数据源或者拆分任务,例如,并行任务中数据源为A、B、C三个数据库,每个数据库中包括q、w、e、r四个数据表,并行任务中包括x、y、z三个拆分任务,唯一标识信息可以为三维坐标,第一维度使用0、1、2分别标识数据库A、B、C,第二维度使用0、1、2、3分别标识数据表q、w、e、r,第三维度使用0、1、2标识拆分任务x、y、z,一个执行子任务的数据源为A数据库的w数据表,且该执行子任务的拆分任务为y,该执行子任务的唯一标识信息可以为(0,1,1)。

步骤270、控制各核心执行线程从对应的任务分配队列中获取唯一标识信息。

具体的,各执行处理器中的核心执行线程可以分别从各自对应的任务分配队列中获取唯一标识信息,使得核心执行线程可以根据该唯一标识信息展开计算。可以理解的是,不同执行处理器中的核心执行线程处于并行运行状态,核心执行线程之间互不影响。

步骤280、在各核心执行线程中按照唯一标识信息设置对应执行子任务的内存隔离屏障。

其中,内存隔离屏障可以设置各核心执行线程独立资源的技术,具体可以由Thread-local技术实现。

在本发明实施例中,核心执行线程在获取到对应的任务分配队列中的唯一标识信息后,可以按照唯一标识信息使用Thread-local技术设置内存隔离屏障,使得唯一标识信息对应的执行子任务只由本地的核心执行线程执行。

步骤290、控制各核心执行线程处理执行子任务。

具体的,各核心执行线程可以根据获取到的唯一标识信息获取对应的执行子任务,并各核心执行线程并行处理各自的执行子任务,实现线程的多维计算。

步骤2100、确定执行子任务执行失败时,将执行子任务添加到错误队列。

其中,错误队列可以是存储执行失败的执行子任务的队列,错误队列可以针对每个处理器各创建一个,错误队列也可以针对所有的处理器共同创建一个。

具体的,在核心执行线程处理执行子任务失败时,可以将该执行子任务的唯一标识信息存储到错误队列,方便后续的错误处理,例如,可以由处理器中的核心执行线程重新处理错误队列中的执行失败的执行子任务。

本发明实施例,通过获取预先定义的并行任务以及计算维度信息,基于计算维度信息中的数据源信息和拆分任务信息将并行任务拆分为多个执行子任务,检测各处理器的运行负载,将运行负载小于或等于负载阈值的处理器标记为执行处理器,针对各执行处理器创建核心执行线程和任务分配队列,生成各执行子任务的唯一标识信息,将各唯一标识信息随机分配到各任务分配队列,控制各核心执行线程从各自对应的任务分配队列中获取唯一标识信息,按照唯一标识信息创建执行子任务的内存隔离屏障,控制各核心执行线程处理各执行子任务,并将执行失败的执行子任务添加到错误队列,实现了并行任务的多核心线程并行处理,匹配多核处理器的特性,提高并行任务的处理效率,通过随机分配执行子任务,减少任务执行过程中的数据竞争冲突,可进一步增强处理器的处理性能。

图3是本发明实施例二提供的一种并行任务调度方法的示例图,参见图3,一种检索任务调度可以具体包括如下步骤:1、在检索任务启动之前,首先要定义参与计算的任务的维度(1维、2维或者3维)及每个子任务执行的过程,然后将定义好的数据提交给调度器,例如submit(dim(1,2,3),sub-task),其中,sub-task标记子任务。2、调度器根据已定义好的维度确定子任务的数量,通常可以由公式sum=x*y*z(x>0且y>0且z>0),其中,x、y和z分别表示任务的不同维度。3、调度器根据当前可用CPU的数量创建等量的核心执行线程,并且为每个核心执行线程分配任务队列,根据第2步确定的子任务数量创建每个子任务的坐标,并将这些坐标平均分配到每个CPU的任务队列中,其中,分配过程中坐标以乱序的方式插入到不同队列。4、核心执行线程每次抽取自己任务队列中的坐标后,将坐标值通过Thread-Local技术设置内存隔离屏障,确保核心执行线程只处理本任务队列中坐标对应的子任务,然后根据坐标执行第1步中提交的sub-task子任务,此时sub-task子任务的执行过程中可用通过thread-local技术获取当前的坐标以进行多维计算。5、当某个sub-task子任务执行失败时,将失败的坐标插入错误队列。每次子任务执行前可用将对应的坐标写入核心执行线程的线程本地,确保线程执行子任务时可用获取当前线程已存储的坐标值,防止不同线程之间的相互影响。各子任务的坐标以乱序的方式插入到各任务队列,可用减少任务执行过程中的数据精准冲突,可进一步提高减少任务的调度效率。

实施例三

图4是本发明实施例三提供的一种并行任务调度装置的结构示意图,图4示出的装置可执行本发明任意实施例所提供的并行任务调度方法,具备执行方法相应的功能模块和有益效果。该装置可以由软件和/或硬件实现,具体包括:子任务模块301、执行线程模块302、任务分配模块303和任务执行模块304。

子任务模块301,用于根据并行任务的计算维度信息确定至少一个执行子任务。

执行线程模块302,用于基于各处理器的当前工作状态为各所述处理器创建核心执行线程以及对应所述核心执行线程的任务分配队列。

任务分配模块303,用于按照预设规则分配各所述执行子任务到各所述任务分配队列。

任务执行模块304,用于控制各所述核心执行线程处理对应任务分配队列中的执行子任务。

本发明实施例,通过子任务模块计算维度信息将并行任务拆分为至少一个执行子任务,执行线程模块按照各处理器的当前工作状态为处理器创建核心执行线程以及任务分配队列,其中,任务分配队列与核心执行线程一一对应,任务分配模块分配各执行子任务分配到各任务分配队列,任务执行模块控制核心执行线程处理各自任务分配队列中的执行子任务,实现了多维核心执行线程,充分利用多核处理器特性,提高调度任务的执行效率,采用多维核心执行线程处理多数据源的调度,降低任务的编写难度,可提高任务执行过程中的可控性。

进一步的,在上述发明实施例的基础上,所述子任务模块301包括:

信息确定单元,用于获取预先定义的并行任务以及所述并行任务的计算维度信息,其中,所述计算维度信息至少包括数据源信息和拆分任务信息。

任务拆分单元,用于按照所述数据源信息和所述拆分任务信息将所述并行任务拆分为至少一个执行子任务。

进一步的,在上述发明实施例的基础上,所述执行线程模块302包括:

状态检测单元,用于获取各所述处理器的运行负载作为当前工作状态。

处理器确定单元,用于将所述运行负载小于或等于负载阈值的处理器记为执行处理器。

线程建立单元,用于为所述执行处理器创建核心执行线程以及创建对应所述核心执行线程的任务分配队列。

进一步的,在上述发明实施例的基础上,所述任务分配模块303包括:

标识生成单元,用于为各所述执行子任务创建唯一标识信息。

信息分配单元,用于将各所述唯一标识信息随机分配到各所述任务分配队列。

进一步的,在上述发明实施例的基础上,所述任务执行模块304包括:

线性采集单元,用于控制各所述核心执行线程从对应的任务分配队列中获取所述唯一标识信息。

屏障设置单元,用于在各所述核心执行线程中按照所述唯一标识信息设置对应执行子任务的内存隔离屏障。

任务执行单元,用于控制各所述核心执行线程处理所述执行子任务。

进一步的,在上述发明实施例的基础上,所述装置还包括:故障处理模块,用于确定所述执行子任务执行失败时,将所述执行子任务添加到错误队列。

进一步的,在上述发明实施例的基础上,所述任务分配模块303中的唯一标识信息以坐标形式表示,其中,坐标中元素分别代表执行子任务对应的数据源和拆分任务。

实施例四

图5是本发明实施例四提供的一种计算机设备的结构示意图,如图5所示,该计算机设备包括处理器40、存储器41、输入装置42和输出装置43;计算机设备中处理器40的数量可以是一个或多个,图5中以一个处理器40为例;计算机设备中的处理器40、存储器41、输入装置42和输出装置43可以通过总线或其他方式连接,图5中以通过总线连接为例。

存储器41作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的并行任务调度方法对应的程序模块(例如,并行任务调度装置中的子任务模块301、执行线程模块302、任务分配模块303和任务执行模块304)。处理器40通过运行存储在存储器41中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的并行任务调度方法。

存储器41可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器41可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器41可进一步包括相对于处理器40远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置42可用于接收输入的数字或字符信息,以及产生与计算机设备的用户设置以及功能控制有关的键信号输入。输出装置73可包括显示屏等显示设备。

实施例五

本发明实施例五还提供一种包含计算机程序的计算机可读存储介质,所述计算机程序在由计算机处理器执行时用于执行一种并行任务调度方法,该方法包括:

根据并行任务的计算维度信息确定至少一个执行子任务;

基于各处理器的当前工作状态为各所述处理器创建核心执行线程以及对应所述核心执行线程的任务分配队列;

按照预设规则分配各所述执行子任务到各所述任务分配队列;

控制各所述核心执行线程处理对应任务分配队列中的执行子任务。

当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的并行任务调度方法中的相关操作。

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

值得注意的是,上述并行任务调度装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

相关技术
  • 并行任务调度方法、装置、计算机设备和存储介质
  • 任务调度方法、任务调度系统、存储介质和计算机设备
技术分类

06120112966164