一种任务调度方法及装置的制造方法

文档序号:10534596阅读:402来源:国知局
一种任务调度方法及装置的制造方法
【专利摘要】本发明实施例公开了一种任务调度方法及装置,涉及计算机技术领域,不仅可以避免多个线程并行执行任务时,同时访问一个数据块而引发的数据竞争,还可以避免引入锁带来的额外性能开销,减少并发错误的检测和调试难度。具体方案为:根据待执行的多个任务与多个任务待访问的M个数据块的对应关系,将多个任务中的每个任务添加到与该任务对应的数据块的任务队列;采用N个线程并行执行M个任务队列中N个任务队列中的任务,该N个线程中的每个线程执行N个任务队列中一个任务队列中的任务,N个线程中不同的线程执行不同任务队列中的任务,2≤N≤M。本发明用于多核系统的任务调度过程中。
【专利说明】
_种任务调度方法及装置
技术领域
[0001 ]本发明涉及计算机技术领域,尤其涉及一种任务调度方法及装置。
【背景技术】
[0002] 随着处理器技术的发展,多核处理器的使用越来越广泛,市场上大多数处理器采 用多核多线程的体系结构,甚至很多终端配置的处理器已经可以达到4核乃至8核。
[0003] 流式应用是一种常见的应用类型,在采用上述多核处理器处理流式应用的应用数 据时,为了充分利用该多核处理器的并行处理能力,可以将流式应用的应用数据划分为多 个数据块,由多核处理器并行处理上述多个数据块。其中,多核处理器的并行处理过程中, 可能会存在由于采用至少两个线程并行执行任务时,该至少两个线程同时访问一个数据 块,而引发数据竞争。
[0004] 现有技术中,为了避免上述数据竞争,在多核处理器的并行处理过程引入了"锁"。 其中,线程在访问一个数据块之前,需要先获得该数据块的锁,并在访问完成后,需要释放 该数据块的锁。如此在一个线程访问该数据块的过程中,其他线程则不能同时访问该数据 块,则可以避免采用多个线程并行执行任务时,多个线程同时访问一个数据块而引发的数 据克争。
[0005] 但是,存在的问题是:在多核处理器的并行处理过程引入了"锁"后,虽然可以避免 多个线程并行执行任务时,同时访问一个数据块,但是在多线程并行执行任务的过程中,仍 旧存在多个线程同时竞争一个数据块的锁的问题,锁的竞争会带来额外的性能开销。

【发明内容】

[0006] 本发明的实施例提供一种任务调度方法及装置,不仅可以减少多个线程并行执行 任务时,同时访问一个数据块而引发的数据竞争,从而可以提高任务调度的效率。
[0007] 为达到上述目的,本发明的实施例采用如下技术方案:
[0008] 本发明实施例的第一方面,提供一种任务调度方法,该任务调度方法包括:根据待 执行的多个任务与该多个任务待访问的M个数据块的对应关系,将上述多个任务中的每个 任务添加到与该任务对应的数据块的任务队列,其中,该M个数据块与M个任务队列一一对 应;采用N个线程并行执行该M个任务队列中N个任务队列中的任务,其中,该N个线程中的每 个线程执行该N个任务队列中一个任务队列中的任务,该N个线程中不同的线程执行不同任 务队列中的任务,2<N<M。
[0009] 本发明实施例提供的任务调度方法,可以以数据块为中心,多个任务中的每个任 务分别添加到与该任务对应的数据块的任务队列;然后采用N个线程中的每个线程分别执 行一个任务队列中的任务。如此,即使多个线程并行运行,由于采用该多个线程中每一个线 程针对不同的数据块,执行不同数据块的任务队列中的任务;因此,不会存在多个线程同时 竞争一个数据块或者竞争一个数据块的锁的问题。
[0010] 通过本方案,可以减少采用多个线程并行执行任务时,多个线程同时访问一个数 据块而引发的数据竞争,从而可以提高任务调度的效率。并且,由于本方案中无需引入锁机 制,因此可以避免引入锁带来的额外性能开销,降低并发错误的检测和调试难度。
[0011]可以想到的是,由于系统性能或者系统配置的制约,系统中创建的线程的数量有 限;当没有空闲的线程来执行刚刚生成的数据块的任务队列中的任务时,该数据块的任务 队列则需要等待线程执行完其他数据块的任务队列中的任务后,再执行该数据块对应的任 务队列中的任务。例如,当系统中创建了 N个线程,而当前存在M(2<N<M)个数据块的任务 队列中的任务需要被执行时,该N个线程则只能够并行执行M个任务队列中N个任务队列中 的任务。
[0012]据此,本发明实施例的方法还可以包括:将M个任务队列中的至少一个任务队列添 加至等待队列组,该至少一个任务队列中的每个任务队列中包含至少一个任务,且该至少 一个任务未被N个线程中的线程执行。其中,该等待队列组用于按照先进先出的原则存放上 述M个任务队列中的任务队列。
[0013] 通过本方案,可以将M个任务队列中的至少一个任务队列添加至等待队列组,如 此,上述N个线程中的任一线程便可以在空闲后依据等待队列组中存放任务队列的原则,执 行等待队列组中存放任务队列中的任务。
[0014] 可选的,本发明实施例中,采用N个线程并行执行M个任务队列中N个任务队列中的 任务的方法具体可以包括:采用该N个线程,并行执行上述等待队列组中的前N个任务队列 中的任务。
[0015] 其中,该前N个任务队列为该等待队列组中最先添加的N个任务队列,该N个线程中 的每个线程按照先进先出原则执行该前N个任务队列中一相应的任务队列中的任务。
[0016] 进一步的,系统中的任一线程可能会因为执行完一个数据块的任务队列中的所有 任务而处于空闲状态,或者该线程可能会因为退出执行一个数据块的任务队列中的任务而 处于空闲状态,即该线程为空闲线程。此时,该空闲线程则可以执行在上述前N个任务队列 后被添加到上述等待队列组的首个任务队列中的任务。
[0017] 具体的,本发明实施例的方法还可以包括:采用一空闲线程执行等待队列组中第 一队列中的任务,第一队列为在上述前N个任务队列后被添加到该等待队列组的首个任务 队列。
[0018] 并且,为了实时更新该等待队列组中的任务队列,本发明实施例的方法还可以包 括:将被执行的第一队列从该等待队列组中删除。
[0019] 示例性的,在本发明实施例中,上述N个线程中的任一线程执行一任务队列中的任 务的方法可以包括:该线程逐个执行该任务队列中的每个任务。
[0020] 具体的,任务调度装置采用一个线程(第一线程)执行一个任务队列(第二队列)中 的任务的方法,包括:采用第一线程读取第二队列中的第k个任务,并切换到第二队列中的 第k个任务的上下文开始执行,l<k<K,K为第二队列中的任务总数;若采用第一线程执行 完第二队列中的第k个任务,则将第一线程退出第二队列中的第k个任务,并采用第一线程 读取第一队列中的第k+1个任务,并切换到第二队列中的第k+1个任务的上下文开始执行, 直至第二队列中的K个任务执行完毕。
[0021] 可以想到的是,上述线程可能会因为第二队列中的第k个任务等待来自其他任务 队列(第三队列)的任务执行结果,而退出执行第k个任务。此时,则可以将退出执行的第k个 任务添加至第三队列,并在该第k个任务获得该任务执行结果后,采用其他线程(第二线程) 执行第三队列中的该第k个任务。
[0022]具体的,上述多个任务包括属于第二队列的第一任务,该第一任务在被第一线程 执行的过程中等待来自第三队列的任务执行结果,该第一线程为上述N个线程中用于执行 该第二队列中的任务的线程,该第二队列为上述等待队列组中的任一任务队列,该第三队 列为等待队列组中不同于该第二队列的任务队列。
[0023]本发明实施例的方法还可以包括:将第一线程退出执行正在等待上述任务执行结 果的第一任务;将退出执行的第一任务添加至上述第三队列;待该第一任务获得任务执行 结果后,采用第二线程执行第二队列中的第一任务。
[0024]其中,上述第二线程可以为N个线程中执行完相应的任务队列中的任务的线程;或 者,上述第二线程为N个线程中退出执行相应的任务队列中的任务的线程。上述第一任务即 为第二队列中的第k个任务。
[0025]通过上述方案,即使一线程因为该线程正在执行的任务队列中的一任务等待其他 任务队列的任务执行结果,而退出执行该任务,也可以将该任务添加至上述其他任务队列 中。如此,便可以在该任务获得上述其他任务队列的任务执行结果后,采用一个空闲线程执 行该任务队列中的该任务。
[0026]优选的,当一线程开始执行等待队列组中的一个任务队列后,则表示该任务队列 当前不处于等待执行状态。为了及时更新等待队列组中的任务队列,使得该等待队列组中 仅包括未被线程执行的任务所在的任务队列,本发明实施例的方法还可以包括:将等待队 列组中被N个线程中的线程执行的任务所在的任务队列删除。
[0027]通过上述方案,及时删除了等待队列组中已经被执行的任务所在的任务队列,这 样等待队列组中则不会包括已被线程执行的任务所在的任务队列。
[0028] 进一步的,由于在本发明实施例中,一个线程在一定的时间段内,会逐个执行一个 数据块的任务队列中的任务,即一个线程在一定的时间段内针对同一数据块,执行该数据 块对应的任务;那么该线程在一定时间段内进行多次任务切换前后处理的数据是相同的。 如此,可以避免了传统任务并行系统中因任务切换前后处理不同的数据而导致的大量缓存 (cache)彳丁换出换入的问题,从而可以提尚访存效率,提尚程序的性能。
[0029] 本发明实施例的第二方面,提供一种任务调度装置,包括:任务添加模块和任务执 行模块。
[0030] 任务添加模块,用于根据待执行的多个任务与该多个任务待访问的M个数据块的 对应关系,将该多个任务中的每个任务添加到与该任务对应的数据块的任务队列,其中,该 M个数据块与M个任务队列--对应。
[0031] 任务执行模块,用于采用N个线程并行执行上述任务添加模块添加至上述M个任务 队列中N个任务队列中的任务,其中,该N个线程中的每个线程执行该N个任务队列中一个任 务队列中的任务,该N个线程中不同的线程执行不同任务队列中的任务,2SNSM。
[0032]需要说明的是,本发明实施例提供的任务调度装置包括但不限于上述第二方面中 的任务添加模块和任务执行模块,并且第二方面中的任务添加模块和任务执行模块的功能 包括但不限于上述描述中的功能。该任务调度装置包括用于执行上述第一方面以及第一方 面的各种可选方式所述的任务调度方法的模块,这些模块是为了执行上述第一方面以及第 一方面的各种可选方式所述的任务调度方法,而对任务调度装置进行的逻辑上的划分。
[0033]本发明实施例的第三方面,提供一种任务调度装置,该任务调度装置包括:一个或 多个处理器、存储器、总线和通信接口。
[0034] 上述存储器用于存储计算机执行指令,上述处理器与该存储器通过上述总线连 接,当任务调度装置运行时,该处理器执行该存储器存储的计算机执行指令,以使任务调度 装置执行上述第一方面以及第一方面的各种可选方式所述的任务调度方法。
[0035] 本发明实施例的第四方面,提供一种计算机可读存储介质,该计算机可读存储介 质中存储有一个或多个程序代码,该程序代码包括计算机执行指令,当任务调度装置的处 理器执行上述计算机执行指令时,该任务调度装置执行上述第一方面以及第一方面的各种 可选方式所述的任务调度方法。
[0036] 需要说明的是,上述任务调度装置及该任务调度装置执行计算机可读存储介质中 存储的程序的具体技术效果及其相关分析过程可以参考本发明实施例第一方面或第一方 面的任一种实现方式中的相关技术效果描述,此处不再赘述。
【附图说明】
[0037] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可 以根据这些附图获得其他的附图。
[0038]图1为本发明实施例提供的一种DB0S场景示意图;
[0039] 图2为本发明实施例提供的一种任务调度方法的流程图;
[0040] 图3为本发明实施例提供的一种数据块的任务队列实例示意图;
[0041] 图4为本发明实施例提供的另一种数据块的任务队列实例示意图;
[0042] 图5为本发明实施例提供的一种线程调度数据块的任务队列的实例示意图;
[0043] 图6为本发明实施例提供的另一种任务调度方法的流程图;
[0044] 图7为本发明实施例提供的另一种线程调度数据块的任务队列的实例示意图;
[0045] 图8为本发明实施例提供的另一种任务调度方法的流程图;
[0046] 图9为本发明实施例提供的另一种任务调度方法的流程图;
[0047] 图10为本发明实施例提供的一种任务调度装置的结构组成示意图;
[0048] 图11为本发明实施例提供的另一种任务调度装置的结构组成示意图;
[0049] 图12为本发明实施例提供的另一种任务调度装置的结构组成示意图;
[0050] 图13为本发明实施例提供的另一种任务调度装置的结构组成示意图。
【具体实施方式】
[0051] 本发明的说明书以及附图中的术语"第一"和"第二"等是用于区别不同的对象,而 不是用于描述对象的特定顺序。例如,第一队列和第二队列等是用于区别不同的任务队列, 而不是用于描述任务队列的特征顺序。
[0052]在本发明的描述中,除非另有说明,"多个"的含义是指两个或两个以上。例如,多 个处理器或多核处理器是指两个或两个以上处理器。
[0053]此外,本发明的描述中所提到的术语"包括"和"具有"以及它们的任何变形,意图 在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没 有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地 还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0054]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行详细地描 述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部实施例。
[0055] 本发明实施例的技术方案应用于媒体数据处理领域、电信数据处理领域以及大数 据分析处理领域中的"流式应用"的处理过程,可以利用多核处理器的并行处理能力提高其 处理效率的场景中。其中,媒体数据处理包括图像处理、音频处理、视频处理等。
[0056] 具体可以应用于面向数据块的调度(Data Block Oriented Schedule,DB0S)的场 景中。如图1所示,为本发明实施例中的一种DBOS场景示意图。该DBOS场景的软硬件框架10 包括:数据块空间定义接口、任务相关接口、应用层和运行在多核处理器上的操作系统 (Operating System,0S)〇
[0057]以下以处理流式应用的处理过程为例,对图1所示的DBOS场景进行举例说明:
[0058]任务相关接口用于接收应用层的流式应用针对M个数据块的业务处理请求,由操 作系统12根据每个数据块对应的处理请求,为该数据块创建至少一个任务,并将创建的任 务分别添加至该任务指定的数据块的任务队列。
[0059] 数据块空间定义接口用于接收用户编写的用于为M个数据块分配内存空间的程序 代码,由操作系统12用于该M个数据块分配内存空间。该内存空间用于保存M个数据块中每 个数据块的任务队列。其中,数据块空间定义接口和任务相关接口可以为上述操作系统提 供的。
[0060] 多核处理器可以通过操作系统中配置的N个线程调用运行时库(Runtime Library),以数据块为中心,并行执行M个数据块中N个数据块的任务队列中的任务。其中,N 线程执行N个任务队列中一个任务队列中的任务,该N个线程中不同的线程执行不同任务队 列中的任务。
[0061] 可以想到的是,上述M个数据块可以为存储在硬盘中的数据,也可以为存储在内存 空间中的数据;当然,该M个数据块也可以为携带在上述流式应用的业务处理请求中待处理 的数据,本发明实施例对此不做限制。
[0062] 需要说明的是,本发明实施例这里仅以图1所示的DB0S场景为例,对本发明实施例 所应用的DB0S场景进行举例说明。本发明实施例具体所应用的DB0S场景并不限于图1所示 的DB0S场景,因此,图1所示的DB0S场景并不会对本发明实施例的技术方案的应用场景造成 限定。
[0063] 本发明实施例提供的任务调度方法的执行主体可以为安装有多核处理器的计算 机设备(简称多核设备);或者,任务调度方法的执行主体可以为上述多核设备中用于执行 任务调度方法的装置,如任务调度装置。该任务调度装置可以为上述多核设备的中央处理 器(Central Processing Unit,CPU)〇
[0064] 与现有技术中以任务为中心,各个线程并行执行不同的任务时访问数据块,可能 存在多个线程同时竞争一个数据块或者一个数据块的锁的问题相比;本发明实施例中可以 以数据块为中心,将多个任务中的每个任务分别添加到与该任务对应的数据块的任务队 列;然后采用N个线程中的每个线程分别执行一个任务队列中的任务。如此,即使多个线程 并行运行,由于采用该多个线程中每一个线程针对不同的数据块,执行不同数据块的任务 队列中的任务;因此,不会存在多个线程同时竞争一个数据块或者一个数据块的锁的问题。
[0065] 本发明实施例中的用于执行任务调度方法的多核设备可以为个人计算机 ((personal computer,PC)、服务器等可以进行图像、音频、视频等中的"流式应用"处理的 多核计算机设备。
[0066] 下面结合附图,通过具体的实施例及其应用场景,以任务调度方法的执行主体为 上述任务调度方法装置为例,对本发明实施例提供的一种任务调度方法进行详细地说明。 [0067] 实施例一
[0068]本发明实施例提供的一种任务调度方法,如图2所示,该任务调度方法包括:
[0069] S101、任务调度装置根据待执行的多个任务与多个任务待访问的M个数据块的对 应关系,将多个任务中的每个任务添加到与该任务对应的数据块的任务队列。
[0070] 其中,M个数据块与M个任务队列一一对应。
[0071]示例性的,如图3所示,假设当前存在待访问的3个数据块(DBQ、DB^DB2)<^Sf 数据块中,DBo与任务队列0对应,DBi与任务队列1对应,DB2与任务队列2对应。
[0072]假设当前的多个任务(任务a、任务b、任务c、任务d、任务e、任务f和任务g)中,任务 a与DBo和DB2存在对应关系,任务b与DBo存在对应关系,任务c与DBo存在对应关系,任务d与 DBo和DBi存在对应关系,任务e与DBi存在对应关系,任务f?与DBi存在对应关系,任务个g与DB 2 存在对应关系;那么,如图4所示,任务调度装置便可以将任务a、任务b、任务c和任务d添加 到DBo的任务队列(任务队列0),可以将任务d、任务e和任务f添加到DBi的任务队列(任务队 列1),可以将任务g和任务a添加到DB 2的任务队列(任务队列2)。
[0073]需要说明的是,由于上述待执行的多个任务是任务调度装置针对上述M个数据块 创建的,因此在创建该多个任务时,便指定了该多个任务中每个任务对应的数据块。
[0074]其中,任务调度装置可以根据需求为不同的数据块创建各自的任务,任务调度装 置为每一个数据块创建的任务不尽相同,其任务的数量也不尽相同。
[0075]可以想到的是,任务调度装置在为每一个数据块创建任务时,都会指定该任务是 针对哪一个数据块创建的;从而任务调度装置可以根据创建任务时各个任务所指定的数据 块,将创建的任务分别添加至该任务指定的数据块的任务队列。
[0076] 如图4所示,任务调度装置为DBo创建了 4个任务,包括:任务a、任务b、任务c和任务 d;任务调度装置为DBi创建了 3个任务,包括:任务d、任务e和任务f;任务调度装置为DB2创建 了 2个任务,包括:任务g和任务a。
[0077]需要说明的是,任务调度装置为数据块创建任务的方法可以参考现有技术中为数 据块创建任务的相关方法,本发明实施例这里不再赘述。
[0078] S102、任务调度装置采用N个线程并行执行M个任务队列中N个任务队列中的任务, 该N个线程中的每个线程执行该N个任务队列中一个任务队列中的任务,该N个线程中不同 的线程执行不同任务队列中的任务,2SNSM。
[0079] 其中,任务调度装置可以采用N个线程作为N个调度器线程,并行调度N个任务队 列,分别采用该N个线程中的每个线程执行N个任务队列中的一个任务队列中的任务。
[0080] 在本发明实施例中,上述N个线程中的任一线程执行一任务队列中的任务的方法 可以为:该线程逐个执行该任务队列中的每个任务。
[0081 ] 示例性的,如图5所示,任务调度装置可以采用ThreadoJhreacU和Threads并行执 行任务队列0、任务队列1和任务队列2中的任务。具体的,任务调度装置可以同时执行:采用 Threado执行任务队列0中的任务a、任务b、任务c和任务d;采用Threadi执行任务队列1中的 任务d、任务e和任务f;采用Threat^执行任务队列2中的任务g和任务a。
[0082] 以图5所示的Threado、Threadi和Thread〗并行执行任务队列0、任务队列1和任务队 列2中的任务为例。虽然在Threado、Threadi和Thread〗并行执行任务队列0、任务队列1和任 务队列2中的任务的过程中,需要针对DBo执行任务a、任务b、任务c和任务d,针对DBi执行任 务d、任务e和任务f,针对DB 2执行任务g和任务a;但是,对于每一个数据块而言,仅会采用一 个线程执行该数据块的任务队列中的任务。如,采用Threado针对DBo执行任务a、任务b、任务 c和任务d;采用Threadi针对DBi执行任务d、任务e和任务f;采用Thread〗针对DB2执行任务g 和任务a。由此可见,不会存在多个线程同时竞争一个数据块或者一个数据块的锁的问题。
[0083] 可以想到的是,本发明实施例中的N个线程可以为任务调度装置根据系统配置创 建的。其中,在多核处理器系统中,为了保证充分利用系统硬件资源,通常可以创建与当前 处理器核数(或硬件线程数)相同个数的线程。即N可以为该任务调度装置中的处理器核数。 其中,本发明实施例中的线程为操作系统线程(Operating System Thread,0S Thread)。
[0084] 示例性的,若该任务调度装置中的处理器核数为3,那么该任务调度装置则可以创 建3个线程包括:Thread。、Threadi和Thread〗。即一个处理器核上运行一个线程。
[0085] 本发明实施例提供的任务调度方法,可以以数据块为中心,多个任务中的每个任 务分别添加到与该任务对应的数据块的任务队列;然后采用N个线程中的每个线程分别执 行一个任务队列中的任务。如此,即使多个线程并行运行,由于采用该多个线程中每一个线 程针对不同的数据块,执行不同数据块的任务队列中的任务;因此,不会存在多个线程同时 竞争一个数据块或者一个数据块的锁的问题。
[0086] 即通过本方案,可以减少采用多个线程并行执行任务时,多个线程同时访问一个 数据块而引发的数据竞争,从而可以提高任务调度的效率。并且,由于本方案中无需引入锁 机制,因此可以避免引入锁带来的额外性能开销,降低并发错误的检测和调试难度。
[0087] 此外,在本发明实施例中,一个线程在一定的时间段内,会逐个执行一个数据块的 任务队列中的任务,即一个线程在一定的时间段内针对同一数据块,执行该数据块对应的 任务;那么该线程在一定时间段内进行多次任务切换前后处理的数据是相同的。如此,可以 避免了传统任务并行系统中因任务切换前后处理不同的数据而导致的大量缓存(cache)行 换出换入的问题,从而可以提尚访存效率,提尚程序的性能。
[0088] 进一步的,由于系统性能或者系统配置的制约,系统中创建的线程的数量有限,而 数据块的数量一般不会受到系统性能或者系统配置的制约;因此,当数据块的数量大于线 程的数量时,则会有一部分数据块的任务队列需要等待N个线程中存在空闲线程时,再采用 空闲线程执行该部分数据块的任务队列中的任务。
[0089] 例如,当系统中创建了 N个线程,而当前存在M(2彡N彡M)个数据块的任务队列中的 任务需要被执行时,该N个线程则只能够并行执行M个任务队列中N个任务队列中的任务。剩 余的M-N个任务队列则需要等待N个线程中存在空闲线程时,再采用空闲线程执行这M-N个 任务队列中的任务。
[0090] 基于此,如图6所示,本发明实施例的方法还可以包括S10V :
[0091] S10V、任务调度装置将M个任务队列中的至少一个任务队列添加至等待队列组。
[0092] 其中,该至少一个任务队列中的每个任务队列中包含至少一个任务,且该至少一 个任务未被N个线程中的线程执行。该等待队列组用于按照先进先出的原则存放上述M个任 务队列中的任务队列。
[0093] 示例性的,当系统中创建的线程的数量有限,没有空闲的线程来执行刚刚生成的 数据块的任务队列时,任务调度装置可以将生成的数据块的任务队列添加至等待队列组。 如图7所示,任务调度装置可以将数据块DB 3的任务队列(任务队列3)和DB4的任务队列(任务 队列4),添加至等待队列(Wait Queue,Wait Q)组。
[0094] WQ组按照先进先出的原则存放已添加任务、但未被执行的任务队列。在图7中,由 于DB3的任务队列先于DB4的任务队列添加至WQ组;因此,任务调度装置可以在N个线程中的 任一线程为空闲线程时,优先采用该空闲线程调度DB 3的任务队列,执行DB3的任务队列中的 任务。
[0095]可以理解的是,将M个任务队列中的至少一个任务队列添加至等待队列组后,上述 N个线程中的任一线程便可以在空闲后依据等待队列组中存放任务队列的原则,执行等待 队列组中存放任务队列中的任务。
[0096] 可选的,如图6所示,图2中的S102可以替换为S102a:
[0097] S102a、任务调度装置采用该N个线程,并行执行上述等待队列组中的前N个任务队 列中的任务。
[0098] 其中,该前N个任务队列为该等待队列组中最先添加的N个任务队列,该N个线程中 的每个线程按照先进先出原则执行该前N个任务队列中一相应的任务队列中的任务。
[0099] 进一步的,当一线程开始执行等待队列组中的一个任务队列后,则表示该任务队 列当前不处于等待执行状态。为了及时更新等待队列组中的任务队列,使得该等待队列组 中仅包括未被线程执行的任务所在的任务队列,如图8所示,本发明实施例的方法还可以包 括S103:
[0100] S103、任务调度装置将等待队列组中被N个线程中的线程执行的任务所在的任务 队列删除。
[0101] 其中,及时删除等待队列组中已经被N个线程中的线程执行的任务所在的任务队 列,等待队列组中则不会包括已被线程执行的任务所在的任务队列。
[0102] 可以想到的是,系统中的任一线程可能会因为执行完一个数据块的任务队列中的 所有任务而处于空闲状态,或者该线程可能会因为退出执行一个数据块的任务队列中的任 务而处于空闲状态,即该线程为空闲线程。此时,该空闲线程则可以执行在上述前N个任务 队列后被添加到所述等待队列组的首个任务队列中的任务。
[0103] 具体的,如图9所示,本发明实施例的方法还可以包括S104:
[0104] S104、任务调度装置采用一空闲线程执行等待队列组中第一队列中的任务,第一 队列为在上述前N个任务队列后被添加到该等待队列组的首个任务队列。
[0105] 其中,该空闲线程可以为N个线程中执行完相应的任务队列中的任务的线程。
[0106] 并且,为了实时更新该等待队列组中的任务队列,如图9所示,本发明实施例的方 法还可以包括S105:
[0107] S105、任务调度装置将被执行的第一队列从该等待队列组中删除。
[0108] 通过上述方案,及时删除了等待队列组中已经被执行的任务所在的任务队列,这 样便可以保证等待队列组中仅包括未被线程执行的任务所在的任务队列。
[0109] 进一步的,在S101之前,本发明实施例的方法还包括:任务调度装置为M个数据块 中的每一个数据块创建任务队列。
[0110] 其中,任务调度装置为数据块创建的任务队列都是为了存放与该数据块对应的任 务。本发明实施例中任务调度装置为每一个数据块初始创建的任务队列均置空。
[0111] 示例性的,如图3所示,任务调度装置可以以数据块为中心,为DBo创建一个用于添 加DBo对应任务的任务队列0,为DBi创建一个用于添加DBi对应任务的任务队列1,为DB 2创建 一个用于添加DB2对应任务的任务队列2。
[0112] 进一步的,在任务调度装置为M个数据块中的每一个数据块创建任务队列之前,任 务调度装置可以为M个数据块分配用于保存该M个数据块的任务队列的内存空间。具体的, 本发明实施例的方法还可以包括:任务调度装置为M个数据块分配内存空间,内存空间用于 保存M个数据块中的每一个数据块的任务队列。
[0113] 示例性的,任务调度装置可以根据M个数据块中数据块的数据块类型、数据块的大 小以及数据块的数目,为该M个数据块分配内存空间。
[0114] 需要说明的是,任务调度装置为M个数据块分配内存空间的其他方法可以参考现 有技术在数据处理过程中为数据块分配内存空间的相关方法,此处不再赘述。
[0115] 进一步的,上述实施例中,S102、S102a或S104中,任务调度装置采用一个线程(如 第一线程)执行一个任务队列(如第二队列)中的任务的方法具体可以包括Sa-Sb:
[0116] Sa、任务调度装置采用第一线程读取第二队列中的第k个任务,并切换到第二队列 中的第k个任务的上下文开始执行,l<k<K,K为第二队列中的任务总数。
[0117] Sb、若任务调度装置采用第一线程执行完第二队列中的第k个任务,则将第一线程 退出第二队列中的第k个任务,并采用第一线程读取第一队列中的第k+1个任务,并切换到 第二队列中的第k+1个任务的上下文开始执行,直至第二队列中的K个任务执行完毕。
[0118] 进一步的,第一线程可能会因为第二任务中的第k个任务(即第一任务)等待来自 第三队列的任务执行结果,而退出执行该第k个任务。对于这种情况,任务调度装置采用一 第一线程执第二队列中的任务的方法还可以包括Sc:
[0119] Sc、任务调度装置将第一线程退出执行正在等待第三队列的任务执行结果的第一 任务(第二队列中的第k个任务);将退出执行的第一任务添加至第三队列;待该第一任务获 得任务执行结果后,采用第二线程执行第二队列中的第一任务。
[0120]其中,第二队列为上述等待队列组中的任一任务队列,第三队列为等待队列组中 不同于该第二队列的任务队列。
[0121]可以理解的是,在将第一线程退出执行正在等待任务执行结果的第一任务后,则 不能采用该第一线程执行第一任务所在任务队列(第二队列)中的其他任务。此时,该第一 线程就成了一个空闲线程,则可以用于执行等待任务组中其他任务队列中的任务。
[0122]由此可知,上述实施例中的空闲线程(如S104中所述的空闲线程)则不仅可以为N 个线程中执行完相应的任务队列中的任务的线程;空闲线程还可以为N个线程中退出执行 相应的任务队列中的任务的线程。
[0123] 并且,在第一任务获得任务执行结果后,也可以采用一个空闲线程第二队列中的 第一任务。即上述第二线程在第一任务获得任务执行结果时,为空闲线程。
[0124] 同理,该第二线程可以为上述N个线程中执行完相应的任务队列中的任务的线程; 或者,该第二线程为上述N个线程中退出执行相应的任务队列中的任务的线程。
[0125] 示例性的,任务调度装置可以通过以下算法程序实现"任务调度装置采用一个线 程a执行一个任务队列中的任务"。具体算法程序如下所示: Algorithm DBOS Schedule 1: function Schedule () 2 while true do 3: while Wait Q not empty do 4: lock (Wait Q)
[0126] 5 current Task ^ Wait Q.dequeuei) 6 unlock ( Wait Q ) 7: while current Task not null do 8: swap Context ( current Task ) 9 if current Task done then 10: .current Task: - .current Tusk.next 11: continue 12 end if 13 if current Task blocked by another task t then 14: add To Waiting List ( mrrmt Task, t ) 15 break
[0127] 16: end if 17: end while 18- end while IQ: suspend until ^Vait Q is empty 20: end while 21: end function
[0128] 其中,上述算法程序的详细描述如下所示:
[0129] 上述算法程序中第3-18行用于循环判断Wait Q(即本发明实施例中的等待队列 组)是否为空;
[0130] 如果Wait Q为空,则表示当前系统中没有任务队列待处理,此时线程(即调度器线 程)被挂起(详见上述算法程序中第19行);
[0131] 如果Wait Q非空,则采用线程a读取Wait Q中任务队列1中的第一个任务(详见上 述算法程序中第4-6行),切换到该任务队列1的第一个任务的上下文开始执行(详见上述算 法程序中第8行);其中,任务队列1为Wait Q中当前包含的任务队列中,最先添加至该Wait Q的任务队列;
[0132] 将线程a退出执行任务队列1中的第一个任务后,判断线程a退出执行任务队列1中 的第一个任务的原因(详见上述算法程序中第9-16行);
[0133] 如果由于线程a执行完任务队列1中的第一个任务,将线程a退出执行任务队列1中 的第一个任务(详见上述算法程序中第9行),则采用线程a读取该任务队列1中的第二个任 务,并切换到任务队列1的第二个任务的上下文开始执行(详见上述算法程序中第10-11 行);
[0134] 如果因为任务队列1中的第一个任务等待任务队列t的任务执行结果,将线程a退 出执行任务队列1中的第一个任务(详见上述算法程序中第13行),则将任务队列1中的第一 个任务添加至任务队列t,待任务队列a中的第一个任务获得任务队列t的任务执行结果后, 采用一个空闲线程执行任务队列1中的第一个任务(详见上述算法程序中第14行)。其中,任 务队列t为Wait Q中不同于任务队列1的一个任务队列。
[0135] 其中,在因为任务队列1中的第一个任务等待任务队列t的任务执行结果,将线程a 退出执行任务队列1中的第一个任务后,该线程a则变成空闲线程,该线程a可以用于执行 Wait Q中的下一个任务队列中的任务(详见上述算法程序中第15行)。
[0136] 本发明实施例提供的任务调度方法,可以以数据块为中心,多个任务中的每个任 务分别添加到与该任务对应的数据块的任务队列;然后采用N个线程中的每个线程分别执 行一个任务队列中的任务。如此,即使多个线程并行运行,由于采用该多个线程中每一个线 程针对不同的数据块,执行不同数据块的任务队列中的任务;因此,不会存在多个线程同时 竞争一个数据块或者一个数据块的锁的问题。
[0137] 即通过本方案,可以减少采用多个线程并行执行任务时,多个线程同时访问一个 数据块而引发的数据竞争,从而可以提高任务调度的效率。并且,由于本方案中无需引入锁 机制,因此可以避免引入锁带来的额外性能开销,降低并发错误的检测和调试难度。
[0138] 并且,还可以在没有空闲的线程可用于执行任务队列中的任务时,将该任务队列 添加至等待队列组;并且,可以及时删除等待队列组中已经被执行的任务所在的任务队列, 使得等待队列组中不包括已被线程执行的任务所在的任务队列。
[0139] 实施例二
[0140] 本发明实施例提供一种任务调度装置,如图10所示,该任务调度装置包括:任务添 加模块21和任务执行模块22。
[0141]任务添加模块21,用于根据待执行的多个任务与该多个任务待访问的M个数据块 的对应关系,将该多个任务中的每个任务添加到与该任务对应的数据块的任务队列,其中, 该M个数据块与M个任务队列一一对应。
[0142] 任务执行模块22,用于采用N个线程并行执行上述任务添加模块21添加至上述M个 任务队列中N个任务队列中的任务,其中,该N个线程中的每个线程执行该N个任务队列中一 个任务队列中的任务,该N个线程中不同的线程执行不同任务队列中的任务,2SNSM。
[0143] 进一步的,如图11所示,该任务调度装置还可以包括:队列添加模块23。
[0144] 队列添加模块23,用于将上述M个任务队列中的至少一个任务队列添加至等待队 列组,该至少一个任务队列中的每个任务队列中包含至少一个任务,且该至少一个任务未 被上述N个线程中的线程执行。
[0145] 其中,上述等待队列组用于按照先进先出的原则存放上述M个任务队列中的任务 队列。
[0146] 可以想到的是,上述至少一个任务队列中每一个任务队列中的任务都是由任务添 加模块21添加至对应任务队列的。
[0147] 进一步的,上述任务执行模块22,具体用于:
[0148] 采用上述N个线程,并行执行上述等待队列组中的前N个任务队列中的任务。
[0149] 其中,该前N个任务队列为该等待队列组中最先添加的N个任务队列,该N个线程中 的每个线程按照先进先出原则执行该前N个任务队列中一相应的任务队列中的任务。
[0150] 进一步的,所述任务执行模块22,还用于采用一空闲线程执行上述等待队列组中 第一队列中的任务,该第一队列为在上述前N个任务队列后被添加到等待队列组的首个任 务队列。
[0151]如图12所示,该任务调度装置还可以包括:队列删除模块24。
[0152] 队列删除模块24,用于将被所述任务执行模块22执行的所述第一队列从所述等待 队列组中删除。
[0153] 其中,上述空闲线程为上述N个线程中执行完相应的任务队列中的任务的线程;或 者,上述空闲线程为上述N个线程中退出执行相应的任务队列中的任务的线程。
[0154] 进一步的,上述多个任务包括属于第二队列的第一任务,该第一任务在被第一线 程执行的过程中等待来自第三队列的任务执行结果,该第一线程为所述N个线程中用于执 行该第二队列中的任务的线程,该第二队列为上述等待队列组中的任一任务队列,该第三 队列为上述等待队列组中不同于该第二队列的任务队列。
[0155] 该任务调度装置还可以包括:任务控制模块。
[0156] 任务控制模块,用于将所述第一线程退出执行正在等待所述任务执行结果的所述 第一任务。
[0157] 相应的,上述任务添加模块21,还用于将退出执行的所述第一任务添加至所述第 三队列。
[0158] 上述任务执行模块22,还用于待所述第一任务获得所述任务执行结果后,采用第 二线程执行所述第二队列中的所述第一任务。
[0159] 其中,上述第二线程为上述N个线程中执行完相应的任务队列中的任务的线程;或 者,上述第二线程为所述N个线程中退出执行相应的任务队列中的任务的线程。
[0160]进一步的,队列删除模块24,还用于将所述等待队列组中被所述N个线程中的线程 执行的任务所在的任务队列删除。
[0161]需要说明的是,本发明实施例提供的任务调度装置中各个功能模块的详细描述可 以参考本发明方法实施例中的相关内容,本实施例这里不再赘述。
[0162] 本发明实施例提供的任务调度装置,可以以数据块为中心,多个任务中的每个任 务分别添加到与该任务对应的数据块的任务队列;然后采用N个线程中的每个线程分别执 行一个任务队列中的任务。如此,即使多个线程并行运行,由于采用该多个线程中每一个线 程针对不同的数据块,执行不同数据块的任务队列中的任务;因此,不会存在多个线程同时 竞争一个数据块或者一个数据块的锁的问题。
[0163] 即通过本方案,可以减少采用多个线程并行执行任务时,多个线程同时访问一个 数据块而引发的数据竞争,从而可以提高任务调度的效率。并且,由于本方案中无需引入锁 机制,因此可以避免引入锁带来的额外性能开销,降低并发错误的检测和调试难度。
[0164] 此外,在本发明实施例中,一个线程在一定的时间段内,会逐个执行一个数据块的 任务队列中的任务,即一个线程在一定的时间段内针对同一数据块,执行该数据块对应的 任务;那么该线程在一定时间段内进行多次任务切换前后处理的数据是相同的。如此,可以 避免了传统任务并行系统中因任务切换前后处理不同的数据而导致的大量缓存(cache)行 换出换入的问题,从而可以提尚访存效率,提尚程序的性能。
[0165] 实施例三
[0166] 本发明实施例提供一种任务调度装置,如图13所示,该任务调度装置包括:
[0167] 一个或多个处理器31、存储器32、总线系统33,以及一个或多个应用程序,所述一 个或多个处理器31和所述存储器32通过所述总线系统33相连;所述一个或多个应用程序存 储在所述存储器32中,所述一个或多个应用程序包括指令。
[0168] 所述处理器31用于执行所述指令,并具体用于代替上述任务添加模块21、任务执 行模块22、队列添加模块23以及队列删除模块24等,执行如图2、图6、图8和图9中任一附图 所示的任务调度方法。即处理器31可以为上述任务添加模块21、任务执行模块22、队列添加 模块23以及队列删除模块24等功能单元或功能模块的集成,即上述各功能模块可以集成在 一个该处理器31中实现。
[0169] 所述处理器31可能是一个中央处理器(Central Processing Unii^Cro),或者是 特定集成电路(Application Specific Integrated Circuit,ASIC),或者是被配置成实施 本发明实施例的一个或多个集成电路。
[0170] 其中,总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总 线、外部设备互连(Peripheral Component Interconnect,PCI)总线或扩展工业标准体系 结构(Extended Industry Standard Architecture,EISA)总线等。该总线可以分为地址总 线、数据总线、控制总线等。为便于表示,图13中仅用一条粗线表示,但并不表示仅有一根总 线或一种类型的总线。
[0171] 本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有 一个或多个程序代码,所述一个或多个程序代码包括指令,当所述任务调度装置的处理器 31执行所述指令时,所述任务调度装置执行如图2、图6、图8和图9中任一附图所示的任务调 度方法。
[0172] 所述计算机可读存储介质可能包含高速RAM存储器,也可能还包括非易失性存储 器(non-volatile memory),例如至少一个磁盘存储器。
[0173]需要说明的是,上述程序代码可以作为运行于任务调度装置的嵌入式操作系统的 一个组件,也可以作为运行于任务调度装置上的各种应用程序中的一个组件,相对而言,当 上述实施例中提供的任务调度方法作为嵌入式操作系统的一个组件时,可以无需对应用程 序进行修改,实施难度和修改工作量较小。
[0174] 其中,在具体实现过程中,上述图2、图6、图8和图9中任一附图所示的方法流程中 的各步骤均可以通过硬件形式的任务调度装置执行上述非易失性存储介质中存储的软件 形式的程序代码实现。
[0175] 需要说明的是,本发明实施例提供的任务调度装置中你功能模块的具体描述可以 参考本发明方法实施例中对应部分的相关描述,本实施例这里不再赘述。
[0176] 本发明实施例提供的任务调度装置,可以以数据块为中心,多个任务中的每个任 务分别添加到与该任务对应的数据块的任务队列;然后采用N个线程中的每个线程分别执 行一个任务队列中的任务。如此,即使多个线程并行运行,由于采用该多个线程中每一个线 程针对不同的数据块,执行不同数据块的任务队列中的任务;因此,不会存在多个线程同时 竞争一个数据块或者一个数据块的锁的问题。
[0177] 即通过本方案,可以减少采用多个线程并行执行任务时,多个线程同时访问一个 数据块而引发的数据竞争,从而可以提高任务调度的效率。并且,由于本方案中无需引入锁 机制,因此可以避免引入锁带来的额外性能开销,降低并发错误的检测和调试难度。
[0178] 此外,在本发明实施例中,一个线程在一定的时间段内,会逐个执行一个数据块的 任务队列中的任务,即一个线程在一定的时间段内针对同一数据块,执行该数据块对应的 任务;那么该线程在一定时间段内进行多次任务切换前后处理的数据是相同的。如此,可以 避免了传统任务并行系统中因任务切换前后处理不同的数据而导致的大量缓存(cache)行 换出换入的问题,从而可以提尚访存效率,提尚程序的性能。
[0179] 通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的 方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上 述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成 以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前 述方法实施例中的对应过程,在此不再赘述。
[0180] 在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以 通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或 单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元 或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所 显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的 间接耦合或通信连接,可以是电性,机械或其它的形式。
[0181]所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显 示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个 网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目 的。
[0182] 另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以 是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单 元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0183] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用 时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上 或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式 体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机 设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个 实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器 (R0M,Read_0nly Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘 等各种可以存储程序代码的介质。
[0184] 以上所述,仅为本发明的【具体实施方式】,但本发明的保护范围并不局限于此,任何 熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵 盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
【主权项】
1. 一种任务调度方法,其特征在于,所述方法包括: 根据待执行的多个任务与所述多个任务待访问的M个数据块的对应关系,将所述多个 任务中的每个任务添加到与该任务对应的数据块的任务队列,其中,所述M个数据块与M个 任务队列 对应; 采用N个线程并行执行所述M个任务队列中N个任务队列中的任务,其中,所述N个线程 中的每个线程执行所述N个任务队列中一个任务队列中的任务,所述N个线程中不同的线程 执行不同任务队列中的任务,2<N<M。2. 根据权利要求1所述的方法,其特征在于,所述方法还包括: 将所述M个任务队列中的至少一个任务队列添加至等待队列组,所述至少一个任务队 列中的每个任务队列中包含至少一个任务,且所述至少一个任务未被所述N个线程中的线 程执行; 其中,所述等待队列组用于按照先进先出的原则存放所述M个任务队列中的任务队列。3. 根据权利要求2所述的方法,其特征在于,所述采用N个线程并行执行所述M个任务队 列中N个任务队列中的任务,包括: 采用所述N个线程,并行执行所述等待队列组中的前N个任务队列中的任务; 其中,所述前N个任务队列为所述等待队列组中最先添加的N个任务队列,所述N个线程 中的每个线程按照所述先进先出原则执行所述前N个任务队列中一相应的任务队列中的任 务。4. 根据权利要求3所述的方法,其特征在于,所述方法还包括: 采用一空闲线程执行所述等待队列组中第一队列中的任务,所述第一队列为在所述前 N个任务队列后被添加到所述等待队列组的首个任务队列; 将被执行的所述第一队列从所述等待队列组中删除; 其中,所述空闲线程为所述N个线程中执行完相应的任务队列中的任务的线程;或者, 所述空闲线程为所述N个线程中退出执行相应的任务队列中的任务的线程。5. 根据权利要求1-4中任一项所述的方法,其特征在于,所述多个任务包括属于第二队 列的第一任务,所述第一任务在被第一线程执行的过程中等待来自第三队列的任务执行结 果,所述第一线程为所述N个线程中用于执行所述第二队列中的任务的线程,所述第二队列 为所述等待队列组中的任一任务队列,所述第三队列为所述等待队列组中不同于所述第二 队列的任务队列;所述方法还包括: 将所述第一线程退出执行正在等待所述任务执行结果的所述第一任务; 将退出执行的所述第一任务添加至所述第三队列; 待所述第一任务获得所述任务执行结果后,采用第二线程执行所述第二队列中的所述 第一任务; 其中,所述第二线程为所述N个线程中执行完相应的任务队列中的任务的线程;或者, 所述第二线程为所述N个线程中退出执行相应的任务队列中的任务的线程。6. 根据权利要求2-4中任一项所述的方法,其特征在于,所述方法还包括: 将所述等待队列组中被所述N个线程中的线程执行的任务所在的任务队列删除。7. -种任务调度装置,其特征在于,所述装置包括: 任务添加模块,用于根据待执行的多个任务与所述多个任务待访问的M个数据块的对 应关系,将所述多个任务中的每个任务添加到与该任务对应的数据块的任务队列,其中,所 述M个数据块与M个任务队列一一对应; 任务执行模块,用于采用N个线程并行执行所述任务添加模块添加至所述M个任务队列 中N个任务队列中的任务,其中,所述N个线程中的每个线程执行所述N个任务队列中一个任 务队列中的任务,所述N个线程中不同的线程执行不同任务队列中的任务,2<N<M。8. 根据权利要求7所述的装置,其特征在于,所述装置还包括: 队列添加模块,用于将所述M个任务队列中的至少一个任务队列添加至等待队列组,所 述至少一个任务队列中的每个任务队列中包含至少一个任务,且所述至少一个任务未被所 述N个线程中的线程执行; 其中,所述等待队列组用于按照先进先出的原则存放所述M个任务队列中的任务队列。9. 根据权利要求8所述的装置,其特征在于,所述任务执行模块,具体用于: 采用所述N个线程,并行执行所述等待队列组中的前N个任务队列中的任务; 其中,所述前N个任务队列为所述等待队列组中最先添加的N个任务队列,所述N个线程 中的每个线程按照所述先进先出原则执行所述前N个任务队列中一相应的任务队列中的任 务。10. 根据权利要求9所述的装置,其特征在于,所述任务执行模块,还用于采用一空闲线 程执行所述等待队列组中第一队列中的任务,所述第一队列为在所述前N个任务队列后被 添加到所述等待队列组的首个任务队列; 所述装置还包括: 队列删除模块,用于将被所述任务执行模块执行的所述第一队列从所述等待队列组中 删除; 其中,所述空闲线程为所述N个线程中执行完相应的任务队列中的任务的线程;或者, 所述空闲线程为所述N个线程中退出执行相应的任务队列中的任务的线程。11. 根据权利要求7-10中任一项所述的装置,其特征在于,所述多个任务包括属于第二 队列的第一任务,所述第一任务在被第一线程执行的过程中等待来自第三队列的任务执行 结果,所述第一线程为所述N个线程中用于执行所述第二队列中的任务的线程,所述第二队 列为所述等待队列组中的任一任务队列,所述第三队列为所述等待队列组中不同于所述第 二队列的任务队列;所述装置还包括: 任务控制模块,用于将所述第一线程退出执行正在等待所述任务执行结果的所述第一 任务; 相应的,所述任务添加模块,还用于将退出执行的所述第一任务添加至所述第三队列; 所述任务执行模块,还用于待所述第一任务获得所述任务执行结果后,采用第二线程 执行所述第二队列中的所述第一任务; 其中,所述第二线程为所述N个线程中执行完相应的任务队列中的任务的线程;或者, 所述第二线程为所述N个线程中退出执行相应的任务队列中的任务的线程。12. 根据权利要求10所述的装置,其特征在于,所述队列删除模块,还用于将所述等待 队列组中被所述N个线程中的线程执行的任务所在的任务队列删除。13. -种任务调度装置,其特征在于,所述装置包括:一个或多个处理器、存储器、总线 和通信接口; 所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接, 当所述任务调度装置运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以 使所述任务调度装置执行如权利要求1-6任意一项所述的任务调度方法。
【文档编号】G06F9/48GK105893126SQ201610188139
【公开日】2016年8月24日
【申请日】2016年3月29日
【发明人】赵鹏, 刘雷, 曹玮
【申请人】华为技术有限公司, 中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1