CN105893126B - 一种任务调度方法及装置 - Google Patents

一种任务调度方法及装置 Download PDF

Info

Publication number
CN105893126B
CN105893126B CN201610188139.2A CN201610188139A CN105893126B CN 105893126 B CN105893126 B CN 105893126B CN 201610188139 A CN201610188139 A CN 201610188139A CN 105893126 B CN105893126 B CN 105893126B
Authority
CN
China
Prior art keywords
task
queue
thread
task queue
data block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201610188139.2A
Other languages
English (en)
Other versions
CN105893126A (zh
Inventor
赵鹏
刘雷
曹玮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
Original Assignee
Huawei Technologies Co Ltd
Institute of Computing Technology of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd, Institute of Computing Technology of CAS filed Critical Huawei Technologies Co Ltd
Priority to CN201610188139.2A priority Critical patent/CN105893126B/zh
Publication of CN105893126A publication Critical patent/CN105893126A/zh
Priority to EP16896547.3A priority patent/EP3425502B1/en
Priority to PCT/CN2016/102055 priority patent/WO2017166777A1/zh
Priority to US16/145,607 priority patent/US10891158B2/en
Application granted granted Critical
Publication of CN105893126B publication Critical patent/CN105893126B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Multi Processors (AREA)

Abstract

本发明实施例公开了一种任务调度方法及装置,涉及计算机技术领域,不仅可以避免多个线程并行执行任务时,同时访问一个数据块而引发的数据竞争,还可以避免引入锁带来的额外性能开销,减少并发错误的检测和调试难度。具体方案为:根据待执行的多个任务与多个任务待访问的M个数据块的对应关系,将多个任务中的每个任务添加到与该任务对应的数据块的任务队列;采用N个线程并行执行M个任务队列中N个任务队列中的任务,该N个线程中的每个线程执行N个任务队列中一个任务队列中的任务,N个线程中不同的线程执行不同任务队列中的任务,2≤N≤M。本发明用于多核系统的任务调度过程中。

Description

一种任务调度方法及装置
技术领域
本发明涉及计算机技术领域,尤其涉及一种任务调度方法及装置。
背景技术
随着处理器技术的发展,多核处理器的使用越来越广泛,市场上大多数处理器采用多核多线程的体系结构,甚至很多终端配置的处理器已经可以达到4核乃至8核。
流式应用是一种常见的应用类型,在采用上述多核处理器处理流式应用的应用数据时,为了充分利用该多核处理器的并行处理能力,可以将流式应用的应用数据划分为多个数据块,由多核处理器并行处理上述多个数据块。其中,多核处理器的并行处理过程中,可能会存在由于采用至少两个线程并行执行任务时,该至少两个线程同时访问一个数据块,而引发数据竞争。
现有技术中,为了避免上述数据竞争,在多核处理器的并行处理过程引入了“锁”。其中,线程在访问一个数据块之前,需要先获得该数据块的锁,并在访问完成后,需要释放该数据块的锁。如此在一个线程访问该数据块的过程中,其他线程则不能同时访问该数据块,则可以避免采用多个线程并行执行任务时,多个线程同时访问一个数据块而引发的数据竞争。
但是,存在的问题是:在多核处理器的并行处理过程引入了“锁”后,虽然可以避免多个线程并行执行任务时,同时访问一个数据块,但是在多线程并行执行任务的过程中,仍旧存在多个线程同时竞争一个数据块的锁的问题,锁的竞争会带来额外的性能开销。
发明内容
本发明的实施例提供一种任务调度方法及装置,不仅可以减少多个线程并行执行任务时,同时访问一个数据块而引发的数据竞争,从而可以提高任务调度的效率。
为达到上述目的,本发明的实施例采用如下技术方案:
本发明实施例的第一方面,提供一种任务调度方法,该任务调度方法包括:根据待执行的多个任务与该多个任务待访问的M个数据块的对应关系,将上述多个任务中的每个任务添加到与该任务对应的数据块的任务队列,其中,该M个数据块与M个任务队列一一对应;采用N个线程并行执行该M个任务队列中N个任务队列中的任务,其中,该N个线程中的每个线程执行该N个任务队列中一个任务队列中的任务,该N个线程中不同的线程执行不同任务队列中的任务,2≤N≤M。
本发明实施例提供的任务调度方法,可以以数据块为中心,多个任务中的每个任务分别添加到与该任务对应的数据块的任务队列;然后采用N个线程中的每个线程分别执行一个任务队列中的任务。如此,即使多个线程并行运行,由于采用该多个线程中每一个线程针对不同的数据块,执行不同数据块的任务队列中的任务;因此,不会存在多个线程同时竞争一个数据块或者竞争一个数据块的锁的问题。
通过本方案,可以减少采用多个线程并行执行任务时,多个线程同时访问一个数据块而引发的数据竞争,从而可以提高任务调度的效率。并且,由于本方案中无需引入锁机制,因此可以避免引入锁带来的额外性能开销,降低并发错误的检测和调试难度。
可以想到的是,由于系统性能或者系统配置的制约,系统中创建的线程的数量有限;当没有空闲的线程来执行刚刚生成的数据块的任务队列中的任务时,该数据块的任务队列则需要等待线程执行完其他数据块的任务队列中的任务后,再执行该数据块对应的任务队列中的任务。例如,当系统中创建了N个线程,而当前存在M(2≤N≤M)个数据块的任务队列中的任务需要被执行时,该N个线程则只能够并行执行M个任务队列中N个任务队列中的任务。
据此,本发明实施例的方法还可以包括:将M个任务队列中的至少一个任务队列添加至等待队列组,该至少一个任务队列中的每个任务队列中包含至少一个任务,且该至少一个任务未被N个线程中的线程执行。其中,该等待队列组用于按照先进先出的原则存放上述M个任务队列中的任务队列。
通过本方案,可以将M个任务队列中的至少一个任务队列添加至等待队列组,如此,上述N个线程中的任一线程便可以在空闲后依据等待队列组中存放任务队列的原则,执行等待队列组中存放任务队列中的任务。
可选的,本发明实施例中,采用N个线程并行执行M个任务队列中N个任务队列中的任务的方法具体可以包括:采用该N个线程,并行执行上述等待队列组中的前N个任务队列中的任务。
其中,该前N个任务队列为该等待队列组中最先添加的N个任务队列,该N个线程中的每个线程按照先进先出原则执行该前N个任务队列中一相应的任务队列中的任务。
进一步的,系统中的任一线程可能会因为执行完一个数据块的任务队列中的所有任务而处于空闲状态,或者该线程可能会因为退出执行一个数据块的任务队列中的任务而处于空闲状态,即该线程为空闲线程。此时,该空闲线程则可以执行在上述前N个任务队列后被添加到上述等待队列组的首个任务队列中的任务。
具体的,本发明实施例的方法还可以包括:采用一空闲线程执行等待队列组中第一队列中的任务,第一队列为在上述前N个任务队列后被添加到该等待队列组的首个任务队列。
并且,为了实时更新该等待队列组中的任务队列,本发明实施例的方法还可以包括:将被执行的第一队列从该等待队列组中删除。
示例性的,在本发明实施例中,上述N个线程中的任一线程执行一任务队列中的任务的方法可以包括:该线程逐个执行该任务队列中的每个任务。
具体的,任务调度装置采用一个线程(第一线程)执行一个任务队列(第二队列)中的任务的方法,包括:采用第一线程读取第二队列中的第k个任务,并切换到第二队列中的第k个任务的上下文开始执行,1≤k<K,K为第二队列中的任务总数;若采用第一线程执行完第二队列中的第k个任务,则将第一线程退出第二队列中的第k个任务,并采用第一线程读取第一队列中的第k+1个任务,并切换到第二队列中的第k+1个任务的上下文开始执行,直至第二队列中的K个任务执行完毕。
可以想到的是,上述线程可能会因为第二队列中的第k个任务等待来自其他任务队列(第三队列)的任务执行结果,而退出执行第k个任务。此时,则可以将退出执行的第k个任务添加至第三队列,并在该第k个任务获得该任务执行结果后,采用其他线程(第二线程)执行第三队列中的该第k个任务。
具体的,上述多个任务包括属于第二队列的第一任务,该第一任务在被第一线程执行的过程中等待来自第三队列的任务执行结果,该第一线程为上述N个线程中用于执行该第二队列中的任务的线程,该第二队列为上述等待队列组中的任一任务队列,该第三队列为等待队列组中不同于该第二队列的任务队列。
本发明实施例的方法还可以包括:将第一线程退出执行正在等待上述任务执行结果的第一任务;将退出执行的第一任务添加至上述第三队列;待该第一任务获得任务执行结果后,采用第二线程执行第二队列中的第一任务。
其中,上述第二线程可以为N个线程中执行完相应的任务队列中的任务的线程;或者,上述第二线程为N个线程中退出执行相应的任务队列中的任务的线程。上述第一任务即为第二队列中的第k个任务。
通过上述方案,即使一线程因为该线程正在执行的任务队列中的一任务等待其他任务队列的任务执行结果,而退出执行该任务,也可以将该任务添加至上述其他任务队列中。如此,便可以在该任务获得上述其他任务队列的任务执行结果后,采用一个空闲线程执行该任务队列中的该任务。
优选的,当一线程开始执行等待队列组中的一个任务队列后,则表示该任务队列当前不处于等待执行状态。为了及时更新等待队列组中的任务队列,使得该等待队列组中仅包括未被线程执行的任务所在的任务队列,本发明实施例的方法还可以包括:将等待队列组中被N个线程中的线程执行的任务所在的任务队列删除。
通过上述方案,及时删除了等待队列组中已经被执行的任务所在的任务队列,这样等待队列组中则不会包括已被线程执行的任务所在的任务队列。
进一步的,由于在本发明实施例中,一个线程在一定的时间段内,会逐个执行一个数据块的任务队列中的任务,即一个线程在一定的时间段内针对同一数据块,执行该数据块对应的任务;那么该线程在一定时间段内进行多次任务切换前后处理的数据是相同的。如此,可以避免了传统任务并行系统中因任务切换前后处理不同的数据而导致的大量缓存(cache)行换出换入的问题,从而可以提高访存效率,提高程序的性能。
本发明实施例的第二方面,提供一种任务调度装置,包括:任务添加模块和任务执行模块。
任务添加模块,用于根据待执行的多个任务与该多个任务待访问的M个数据块的对应关系,将该多个任务中的每个任务添加到与该任务对应的数据块的任务队列,其中,该M个数据块与M个任务队列一一对应。
任务执行模块,用于采用N个线程并行执行上述任务添加模块添加至上述M个任务队列中N个任务队列中的任务,其中,该N个线程中的每个线程执行该N个任务队列中一个任务队列中的任务,该N个线程中不同的线程执行不同任务队列中的任务,2≤N≤M。
需要说明的是,本发明实施例提供的任务调度装置包括但不限于上述第二方面中的任务添加模块和任务执行模块,并且第二方面中的任务添加模块和任务执行模块的功能包括但不限于上述描述中的功能。该任务调度装置包括用于执行上述第一方面以及第一方面的各种可选方式所述的任务调度方法的模块,这些模块是为了执行上述第一方面以及第一方面的各种可选方式所述的任务调度方法,而对任务调度装置进行的逻辑上的划分。
本发明实施例的第三方面,提供一种任务调度装置,该任务调度装置包括:一个或多个处理器、存储器、总线和通信接口。
上述存储器用于存储计算机执行指令,上述处理器与该存储器通过上述总线连接,当任务调度装置运行时,该处理器执行该存储器存储的计算机执行指令,以使任务调度装置执行上述第一方面以及第一方面的各种可选方式所述的任务调度方法。
本发明实施例的第四方面,提供一种计算机可读存储介质,该计算机可读存储介质中存储有一个或多个程序代码,该程序代码包括计算机执行指令,当任务调度装置的处理器执行上述计算机执行指令时,该任务调度装置执行上述第一方面以及第一方面的各种可选方式所述的任务调度方法。
需要说明的是,上述任务调度装置及该任务调度装置执行计算机可读存储介质中存储的程序的具体技术效果及其相关分析过程可以参考本发明实施例第一方面或第一方面的任一种实现方式中的相关技术效果描述,此处不再赘述。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种DBOS场景示意图;
图2为本发明实施例提供的一种任务调度方法的流程图;
图3为本发明实施例提供的一种数据块的任务队列实例示意图;
图4为本发明实施例提供的另一种数据块的任务队列实例示意图;
图5为本发明实施例提供的一种线程调度数据块的任务队列的实例示意图;
图6为本发明实施例提供的另一种任务调度方法的流程图;
图7为本发明实施例提供的另一种线程调度数据块的任务队列的实例示意图;
图8为本发明实施例提供的另一种任务调度方法的流程图;
图9为本发明实施例提供的另一种任务调度方法的流程图;
图10为本发明实施例提供的一种任务调度装置的结构组成示意图;
图11为本发明实施例提供的另一种任务调度装置的结构组成示意图;
图12为本发明实施例提供的另一种任务调度装置的结构组成示意图;
图13为本发明实施例提供的另一种任务调度装置的结构组成示意图。
具体实施方式
本发明的说明书以及附图中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一队列和第二队列等是用于区别不同的任务队列,而不是用于描述任务队列的特征顺序。
在本发明的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个处理器或多核处理器是指两个或两个以上处理器。
此外,本发明的描述中所提到的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括其他没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部实施例。
本发明实施例的技术方案应用于媒体数据处理领域、电信数据处理领域以及大数据分析处理领域中的“流式应用”的处理过程,可以利用多核处理器的并行处理能力提高其处理效率的场景中。其中,媒体数据处理包括图像处理、音频处理、视频处理等。
具体可以应用于面向数据块的调度(Data Block Oriented Schedule,DBOS)的场景中。如图1所示,为本发明实施例中的一种DBOS场景示意图。该DBOS场景的软硬件框架10包括:数据块空间定义接口、任务相关接口、应用层和运行在多核处理器上的操作系统(Operating System,OS)。
以下以处理流式应用的处理过程为例,对图1所示的DBOS场景进行举例说明:
任务相关接口用于接收应用层的流式应用针对M个数据块的业务处理请求,由操作系统12根据每个数据块对应的处理请求,为该数据块创建至少一个任务,并将创建的任务分别添加至该任务指定的数据块的任务队列。
数据块空间定义接口用于接收用户编写的用于为M个数据块分配内存空间的程序代码,由操作系统12用于该M个数据块分配内存空间。该内存空间用于保存M个数据块中每个数据块的任务队列。其中,数据块空间定义接口和任务相关接口可以为上述操作系统提供的。
多核处理器可以通过操作系统中配置的N个线程调用运行时库(RuntimeLibrary),以数据块为中心,并行执行M个数据块中N个数据块的任务队列中的任务。其中,N线程执行N个任务队列中一个任务队列中的任务,该N个线程中不同的线程执行不同任务队列中的任务。
可以想到的是,上述M个数据块可以为存储在硬盘中的数据,也可以为存储在内存空间中的数据;当然,该M个数据块也可以为携带在上述流式应用的业务处理请求中待处理的数据,本发明实施例对此不做限制。
需要说明的是,本发明实施例这里仅以图1所示的DBOS场景为例,对本发明实施例所应用的DBOS场景进行举例说明。本发明实施例具体所应用的DBOS场景并不限于图1所示的DBOS场景,因此,图1所示的DBOS场景并不会对本发明实施例的技术方案的应用场景造成限定。
本发明实施例提供的任务调度方法的执行主体可以为安装有多核处理器的计算机设备(简称多核设备);或者,任务调度方法的执行主体可以为上述多核设备中用于执行任务调度方法的装置,如任务调度装置。该任务调度装置可以为上述多核设备的中央处理器(Central Processing Unit,CPU)。
与现有技术中以任务为中心,各个线程并行执行不同的任务时访问数据块,可能存在多个线程同时竞争一个数据块或者一个数据块的锁的问题相比;本发明实施例中可以以数据块为中心,将多个任务中的每个任务分别添加到与该任务对应的数据块的任务队列;然后采用N个线程中的每个线程分别执行一个任务队列中的任务。如此,即使多个线程并行运行,由于采用该多个线程中每一个线程针对不同的数据块,执行不同数据块的任务队列中的任务;因此,不会存在多个线程同时竞争一个数据块或者一个数据块的锁的问题。
本发明实施例中的用于执行任务调度方法的多核设备可以为个人计算机((personal computer,PC)、服务器等可以进行图像、音频、视频等中的“流式应用”处理的多核计算机设备。
下面结合附图,通过具体的实施例及其应用场景,以任务调度方法的执行主体为上述任务调度方法装置为例,对本发明实施例提供的一种任务调度方法进行详细地说明。
实施例一
本发明实施例提供的一种任务调度方法,如图2所示,该任务调度方法包括:
S101、任务调度装置根据待执行的多个任务与多个任务待访问的M个数据块的对应关系,将多个任务中的每个任务添加到与该任务对应的数据块的任务队列。
其中,M个数据块与M个任务队列一一对应。
示例性的,如图3所示,假设当前存在待访问的3个数据块(DB0、DB1和DB2)。这三个数据块中,DB0与任务队列0对应,DB1与任务队列1对应,DB2与任务队列2对应。
假设当前的多个任务(任务a、任务b、任务c、任务d、任务e、任务f和任务g)中,任务a与DB0和DB2存在对应关系,任务b与DB0存在对应关系,任务c与DB0存在对应关系,任务d与DB0和DB1存在对应关系,任务e与DB1存在对应关系,任务f与DB1存在对应关系,任务个g与DB2存在对应关系;那么,如图4所示,任务调度装置便可以将任务a、任务b、任务c和任务d添加到DB0的任务队列(任务队列0),可以将任务d、任务e和任务f添加到DB1的任务队列(任务队列1),可以将任务g和任务a添加到DB2的任务队列(任务队列2)。
需要说明的是,由于上述待执行的多个任务是任务调度装置针对上述M个数据块创建的,因此在创建该多个任务时,便指定了该多个任务中每个任务对应的数据块。
其中,任务调度装置可以根据需求为不同的数据块创建各自的任务,任务调度装置为每一个数据块创建的任务不尽相同,其任务的数量也不尽相同。
可以想到的是,任务调度装置在为每一个数据块创建任务时,都会指定该任务是针对哪一个数据块创建的;从而任务调度装置可以根据创建任务时各个任务所指定的数据块,将创建的任务分别添加至该任务指定的数据块的任务队列。
如图4所示,任务调度装置为DB0创建了4个任务,包括:任务a、任务b、任务c和任务d;任务调度装置为DB1创建了3个任务,包括:任务d、任务e和任务f;任务调度装置为DB2创建了2个任务,包括:任务g和任务a。
需要说明的是,任务调度装置为数据块创建任务的方法可以参考现有技术中为数据块创建任务的相关方法,本发明实施例这里不再赘述。
S102、任务调度装置采用N个线程并行执行M个任务队列中N个任务队列中的任务,该N个线程中的每个线程执行该N个任务队列中一个任务队列中的任务,该N个线程中不同的线程执行不同任务队列中的任务,2≤N≤M。
其中,任务调度装置可以采用N个线程作为N个调度器线程,并行调度N个任务队列,分别采用该N个线程中的每个线程执行N个任务队列中的一个任务队列中的任务。
在本发明实施例中,上述N个线程中的任一线程执行一任务队列中的任务的方法可以为:该线程逐个执行该任务队列中的每个任务。
示例性的,如图5所示,任务调度装置可以采用Thread0、Thread1和Thread2,并行执行任务队列0、任务队列1和任务队列2中的任务。具体的,任务调度装置可以同时执行:采用Thread0执行任务队列0中的任务a、任务b、任务c和任务d;采用Thread1执行任务队列1中的任务d、任务e和任务f;采用Thread2执行任务队列2中的任务g和任务a。
以图5所示的Thread0、Thread1和Thread2并行执行任务队列0、任务队列1和任务队列2中的任务为例。虽然在Thread0、Thread1和Thread2并行执行任务队列0、任务队列1和任务队列2中的任务的过程中,需要针对DB0执行任务a、任务b、任务c和任务d,针对DB1执行任务d、任务e和任务f,针对DB2执行任务g和任务a;但是,对于每一个数据块而言,仅会采用一个线程执行该数据块的任务队列中的任务。如,采用Thread0针对DB0执行任务a、任务b、任务c和任务d;采用Thread1针对DB1执行任务d、任务e和任务f;采用Thread2针对DB2执行任务g和任务a。由此可见,不会存在多个线程同时竞争一个数据块或者一个数据块的锁的问题。
可以想到的是,本发明实施例中的N个线程可以为任务调度装置根据系统配置创建的。其中,在多核处理器系统中,为了保证充分利用系统硬件资源,通常可以创建与当前处理器核数(或硬件线程数)相同个数的线程。即N可以为该任务调度装置中的处理器核数。其中,本发明实施例中的线程为操作系统线程(Operating System Thread,OS Thread)。
示例性的,若该任务调度装置中的处理器核数为3,那么该任务调度装置则可以创建3个线程包括:Thread0、Thread1和Thread2。即一个处理器核上运行一个线程。
本发明实施例提供的任务调度方法,可以以数据块为中心,多个任务中的每个任务分别添加到与该任务对应的数据块的任务队列;然后采用N个线程中的每个线程分别执行一个任务队列中的任务。如此,即使多个线程并行运行,由于采用该多个线程中每一个线程针对不同的数据块,执行不同数据块的任务队列中的任务;因此,不会存在多个线程同时竞争一个数据块或者一个数据块的锁的问题。
即通过本方案,可以减少采用多个线程并行执行任务时,多个线程同时访问一个数据块而引发的数据竞争,从而可以提高任务调度的效率。并且,由于本方案中无需引入锁机制,因此可以避免引入锁带来的额外性能开销,降低并发错误的检测和调试难度。
此外,在本发明实施例中,一个线程在一定的时间段内,会逐个执行一个数据块的任务队列中的任务,即一个线程在一定的时间段内针对同一数据块,执行该数据块对应的任务;那么该线程在一定时间段内进行多次任务切换前后处理的数据是相同的。如此,可以避免了传统任务并行系统中因任务切换前后处理不同的数据而导致的大量缓存(cache)行换出换入的问题,从而可以提高访存效率,提高程序的性能。
进一步的,由于系统性能或者系统配置的制约,系统中创建的线程的数量有限,而数据块的数量一般不会受到系统性能或者系统配置的制约;因此,当数据块的数量大于线程的数量时,则会有一部分数据块的任务队列需要等待N个线程中存在空闲线程时,再采用空闲线程执行该部分数据块的任务队列中的任务。
例如,当系统中创建了N个线程,而当前存在M(2≤N≤M)个数据块的任务队列中的任务需要被执行时,该N个线程则只能够并行执行M个任务队列中N个任务队列中的任务。剩余的M-N个任务队列则需要等待N个线程中存在空闲线程时,再采用空闲线程执行这M-N个任务队列中的任务。
基于此,如图6所示,本发明实施例的方法还可以包括S101′:
S101′、任务调度装置将M个任务队列中的至少一个任务队列添加至等待队列组。
其中,该至少一个任务队列中的每个任务队列中包含至少一个任务,且该至少一个任务未被N个线程中的线程执行。该等待队列组用于按照先进先出的原则存放上述M个任务队列中的任务队列。
示例性的,当系统中创建的线程的数量有限,没有空闲的线程来执行刚刚生成的数据块的任务队列时,任务调度装置可以将生成的数据块的任务队列添加至等待队列组。如图7所示,任务调度装置可以将数据块DB3的任务队列(任务队列3)和DB4的任务队列(任务队列4),添加至等待队列(Wait Queue,Wait Q)组。
WQ组按照先进先出的原则存放已添加任务、但未被执行的任务队列。在图7中,由于DB3的任务队列先于DB4的任务队列添加至WQ组;因此,任务调度装置可以在N个线程中的任一线程为空闲线程时,优先采用该空闲线程调度DB3的任务队列,执行DB3的任务队列中的任务。
可以理解的是,将M个任务队列中的至少一个任务队列添加至等待队列组后,上述N个线程中的任一线程便可以在空闲后依据等待队列组中存放任务队列的原则,执行等待队列组中存放任务队列中的任务。
可选的,如图6所示,图2中的S102可以替换为S102a:
S102a、任务调度装置采用该N个线程,并行执行上述等待队列组中的前N个任务队列中的任务。
其中,该前N个任务队列为该等待队列组中最先添加的N个任务队列,该N个线程中的每个线程按照先进先出原则执行该前N个任务队列中一相应的任务队列中的任务。
进一步的,当一线程开始执行等待队列组中的一个任务队列后,则表示该任务队列当前不处于等待执行状态。为了及时更新等待队列组中的任务队列,使得该等待队列组中仅包括未被线程执行的任务所在的任务队列,如图8所示,本发明实施例的方法还可以包括S103:
S103、任务调度装置将等待队列组中被N个线程中的线程执行的任务所在的任务队列删除。
其中,及时删除等待队列组中已经被N个线程中的线程执行的任务所在的任务队列,等待队列组中则不会包括已被线程执行的任务所在的任务队列。
可以想到的是,系统中的任一线程可能会因为执行完一个数据块的任务队列中的所有任务而处于空闲状态,或者该线程可能会因为退出执行一个数据块的任务队列中的任务而处于空闲状态,即该线程为空闲线程。此时,该空闲线程则可以执行在上述前N个任务队列后被添加到所述等待队列组的首个任务队列中的任务。
具体的,如图9所示,本发明实施例的方法还可以包括S104:
S104、任务调度装置采用一空闲线程执行等待队列组中第一队列中的任务,第一队列为在上述前N个任务队列后被添加到该等待队列组的首个任务队列。
其中,该空闲线程可以为N个线程中执行完相应的任务队列中的任务的线程。
并且,为了实时更新该等待队列组中的任务队列,如图9所示,本发明实施例的方法还可以包括S105:
S105、任务调度装置将被执行的第一队列从该等待队列组中删除。
通过上述方案,及时删除了等待队列组中已经被执行的任务所在的任务队列,这样便可以保证等待队列组中仅包括未被线程执行的任务所在的任务队列。
进一步的,在S101之前,本发明实施例的方法还包括:任务调度装置为M个数据块中的每一个数据块创建任务队列。
其中,任务调度装置为数据块创建的任务队列都是为了存放与该数据块对应的任务。本发明实施例中任务调度装置为每一个数据块初始创建的任务队列均置空。
示例性的,如图3所示,任务调度装置可以以数据块为中心,为DB0创建一个用于添加DB0对应任务的任务队列0,为DB1创建一个用于添加DB1对应任务的任务队列1,为DB2创建一个用于添加DB2对应任务的任务队列2。
进一步的,在任务调度装置为M个数据块中的每一个数据块创建任务队列之前,任务调度装置可以为M个数据块分配用于保存该M个数据块的任务队列的内存空间。具体的,本发明实施例的方法还可以包括:任务调度装置为M个数据块分配内存空间,内存空间用于保存M个数据块中的每一个数据块的任务队列。
示例性的,任务调度装置可以根据M个数据块中数据块的数据块类型、数据块的大小以及数据块的数目,为该M个数据块分配内存空间。
需要说明的是,任务调度装置为M个数据块分配内存空间的其他方法可以参考现有技术在数据处理过程中为数据块分配内存空间的相关方法,此处不再赘述。
进一步的,上述实施例中,S102、S102a或S104中,任务调度装置采用一个线程(如第一线程)执行一个任务队列(如第二队列)中的任务的方法具体可以包括Sa-Sb:
Sa、任务调度装置采用第一线程读取第二队列中的第k个任务,并切换到第二队列中的第k个任务的上下文开始执行,1≤k<K,K为第二队列中的任务总数。
Sb、若任务调度装置采用第一线程执行完第二队列中的第k个任务,则将第一线程退出第二队列中的第k个任务,并采用第一线程读取第一队列中的第k+1个任务,并切换到第二队列中的第k+1个任务的上下文开始执行,直至第二队列中的K个任务执行完毕。
进一步的,第一线程可能会因为第二任务中的第k个任务(即第一任务)等待来自第三队列的任务执行结果,而退出执行该第k个任务。对于这种情况,任务调度装置采用一第一线程执第二队列中的任务的方法还可以包括Sc:
Sc、任务调度装置将第一线程退出执行正在等待第三队列的任务执行结果的第一任务(第二队列中的第k个任务);将退出执行的第一任务添加至第三队列;待该第一任务获得任务执行结果后,采用第二线程执行第二队列中的第一任务。
其中,第二队列为上述等待队列组中的任一任务队列,第三队列为等待队列组中不同于该第二队列的任务队列。
可以理解的是,在将第一线程退出执行正在等待任务执行结果的第一任务后,则不能采用该第一线程执行第一任务所在任务队列(第二队列)中的其他任务。此时,该第一线程就成了一个空闲线程,则可以用于执行等待任务组中其他任务队列中的任务。
由此可知,上述实施例中的空闲线程(如S104中所述的空闲线程)则不仅可以为N个线程中执行完相应的任务队列中的任务的线程;空闲线程还可以为N个线程中退出执行相应的任务队列中的任务的线程。
并且,在第一任务获得任务执行结果后,也可以采用一个空闲线程第二队列中的第一任务。即上述第二线程在第一任务获得任务执行结果时,为空闲线程。
同理,该第二线程可以为上述N个线程中执行完相应的任务队列中的任务的线程;或者,该第二线程为上述N个线程中退出执行相应的任务队列中的任务的线程。
示例性的,任务调度装置可以通过以下算法程序实现“任务调度装置采用一个线程a执行一个任务队列中的任务”。具体算法程序如下所示:
其中,上述算法程序的详细描述如下所示:
上述算法程序中第3-18行用于循环判断Wait Q(即本发明实施例中的等待队列组)是否为空;
如果Wait Q为空,则表示当前系统中没有任务队列待处理,此时线程(即调度器线程)被挂起(详见上述算法程序中第19行);
如果Wait Q非空,则采用线程a读取Wait Q中任务队列1中的第一个任务(详见上述算法程序中第4-6行),切换到该任务队列1的第一个任务的上下文开始执行(详见上述算法程序中第8行);其中,任务队列1为Wait Q中当前包含的任务队列中,最先添加至该WaitQ的任务队列;
将线程a退出执行任务队列1中的第一个任务后,判断线程a退出执行任务队列1中的第一个任务的原因(详见上述算法程序中第9-16行);
如果由于线程a执行完任务队列1中的第一个任务,将线程a退出执行任务队列1中的第一个任务(详见上述算法程序中第9行),则采用线程a读取该任务队列1中的第二个任务,并切换到任务队列1的第二个任务的上下文开始执行(详见上述算法程序中第10-11行);
如果因为任务队列1中的第一个任务等待任务队列t的任务执行结果,将线程a退出执行任务队列1中的第一个任务(详见上述算法程序中第13行),则将任务队列1中的第一个任务添加至任务队列t,待任务队列a中的第一个任务获得任务队列t的任务执行结果后,采用一个空闲线程执行任务队列1中的第一个任务(详见上述算法程序中第14行)。其中,任务队列t为Wait Q中不同于任务队列1的一个任务队列。
其中,在因为任务队列1中的第一个任务等待任务队列t的任务执行结果,将线程a退出执行任务队列1中的第一个任务后,该线程a则变成空闲线程,该线程a可以用于执行Wait Q中的下一个任务队列中的任务(详见上述算法程序中第15行)。
本发明实施例提供的任务调度方法,可以以数据块为中心,多个任务中的每个任务分别添加到与该任务对应的数据块的任务队列;然后采用N个线程中的每个线程分别执行一个任务队列中的任务。如此,即使多个线程并行运行,由于采用该多个线程中每一个线程针对不同的数据块,执行不同数据块的任务队列中的任务;因此,不会存在多个线程同时竞争一个数据块或者一个数据块的锁的问题。
即通过本方案,可以减少采用多个线程并行执行任务时,多个线程同时访问一个数据块而引发的数据竞争,从而可以提高任务调度的效率。并且,由于本方案中无需引入锁机制,因此可以避免引入锁带来的额外性能开销,降低并发错误的检测和调试难度。
并且,还可以在没有空闲的线程可用于执行任务队列中的任务时,将该任务队列添加至等待队列组;并且,可以及时删除等待队列组中已经被执行的任务所在的任务队列,使得等待队列组中不包括已被线程执行的任务所在的任务队列。
实施例二
本发明实施例提供一种任务调度装置,如图10所示,该任务调度装置包括:任务添加模块21和任务执行模块22。
任务添加模块21,用于根据待执行的多个任务与该多个任务待访问的M个数据块的对应关系,将该多个任务中的每个任务添加到与该任务对应的数据块的任务队列,其中,该M个数据块与M个任务队列一一对应。
任务执行模块22,用于采用N个线程并行执行上述任务添加模块21添加至上述M个任务队列中N个任务队列中的任务,其中,该N个线程中的每个线程执行该N个任务队列中一个任务队列中的任务,该N个线程中不同的线程执行不同任务队列中的任务,2≤N≤M。
进一步的,如图11所示,该任务调度装置还可以包括:队列添加模块23。
队列添加模块23,用于将上述M个任务队列中的至少一个任务队列添加至等待队列组,该至少一个任务队列中的每个任务队列中包含至少一个任务,且该至少一个任务未被上述N个线程中的线程执行。
其中,上述等待队列组用于按照先进先出的原则存放上述M个任务队列中的任务队列。
可以想到的是,上述至少一个任务队列中每一个任务队列中的任务都是由任务添加模块21添加至对应任务队列的。
进一步的,上述任务执行模块22,具体用于:
采用上述N个线程,并行执行上述等待队列组中的前N个任务队列中的任务。
其中,该前N个任务队列为该等待队列组中最先添加的N个任务队列,该N个线程中的每个线程按照先进先出原则执行该前N个任务队列中一相应的任务队列中的任务。
进一步的,所述任务执行模块22,还用于采用一空闲线程执行上述等待队列组中第一队列中的任务,该第一队列为在上述前N个任务队列后被添加到等待队列组的首个任务队列。
如图12所示,该任务调度装置还可以包括:队列删除模块24。
队列删除模块24,用于将被所述任务执行模块22执行的所述第一队列从所述等待队列组中删除。
其中,上述空闲线程为上述N个线程中执行完相应的任务队列中的任务的线程;或者,上述空闲线程为上述N个线程中退出执行相应的任务队列中的任务的线程。
进一步的,上述多个任务包括属于第二队列的第一任务,该第一任务在被第一线程执行的过程中等待来自第三队列的任务执行结果,该第一线程为所述N个线程中用于执行该第二队列中的任务的线程,该第二队列为上述等待队列组中的任一任务队列,该第三队列为上述等待队列组中不同于该第二队列的任务队列。
该任务调度装置还可以包括:任务控制模块。
任务控制模块,用于将所述第一线程退出执行正在等待所述任务执行结果的所述第一任务。
相应的,上述任务添加模块21,还用于将退出执行的所述第一任务添加至所述第三队列。
上述任务执行模块22,还用于待所述第一任务获得所述任务执行结果后,采用第二线程执行所述第二队列中的所述第一任务。
其中,上述第二线程为上述N个线程中执行完相应的任务队列中的任务的线程;或者,上述第二线程为所述N个线程中退出执行相应的任务队列中的任务的线程。
进一步的,队列删除模块24,还用于将所述等待队列组中被所述N个线程中的线程执行的任务所在的任务队列删除。
需要说明的是,本发明实施例提供的任务调度装置中各个功能模块的详细描述可以参考本发明方法实施例中的相关内容,本实施例这里不再赘述。
本发明实施例提供的任务调度装置,可以以数据块为中心,多个任务中的每个任务分别添加到与该任务对应的数据块的任务队列;然后采用N个线程中的每个线程分别执行一个任务队列中的任务。如此,即使多个线程并行运行,由于采用该多个线程中每一个线程针对不同的数据块,执行不同数据块的任务队列中的任务;因此,不会存在多个线程同时竞争一个数据块或者一个数据块的锁的问题。
即通过本方案,可以减少采用多个线程并行执行任务时,多个线程同时访问一个数据块而引发的数据竞争,从而可以提高任务调度的效率。并且,由于本方案中无需引入锁机制,因此可以避免引入锁带来的额外性能开销,降低并发错误的检测和调试难度。
此外,在本发明实施例中,一个线程在一定的时间段内,会逐个执行一个数据块的任务队列中的任务,即一个线程在一定的时间段内针对同一数据块,执行该数据块对应的任务;那么该线程在一定时间段内进行多次任务切换前后处理的数据是相同的。如此,可以避免了传统任务并行系统中因任务切换前后处理不同的数据而导致的大量缓存(cache)行换出换入的问题,从而可以提高访存效率,提高程序的性能。
实施例三
本发明实施例提供一种任务调度装置,如图13所示,该任务调度装置包括:
一个或多个处理器31、存储器32、总线系统33,以及一个或多个应用程序,所述一个或多个处理器31和所述存储器32通过所述总线系统33相连;所述一个或多个应用程序存储在所述存储器32中,所述一个或多个应用程序包括指令。
所述处理器31用于执行所述指令,并具体用于代替上述任务添加模块21、任务执行模块22、队列添加模块23以及队列删除模块24等,执行如图2、图6、图8和图9中任一附图所示的任务调度方法。即处理器31可以为上述任务添加模块21、任务执行模块22、队列添加模块23以及队列删除模块24等功能单元或功能模块的集成,即上述各功能模块可以集成在一个该处理器31中实现。
所述处理器31可能是一个中央处理器(Central Processing Unit,CPU),或者是特定集成电路(Application Specific Integrated Circuit,ASIC),或者是被配置成实施本发明实施例的一个或多个集成电路。
其中,总线可以是工业标准体系结构(Industry Standard Architecture,ISA)总线、外部设备互连(Peripheral Component Interconnect,PCI)总线或扩展工业标准体系结构(Extended Industry Standard Architecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图13中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
本发明实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有一个或多个程序代码,所述一个或多个程序代码包括指令,当所述任务调度装置的处理器31执行所述指令时,所述任务调度装置执行如图2、图6、图8和图9中任一附图所示的任务调度方法。
所述计算机可读存储介质可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
需要说明的是,上述程序代码可以作为运行于任务调度装置的嵌入式操作系统的一个组件,也可以作为运行于任务调度装置上的各种应用程序中的一个组件,相对而言,当上述实施例中提供的任务调度方法作为嵌入式操作系统的一个组件时,可以无需对应用程序进行修改,实施难度和修改工作量较小。
其中,在具体实现过程中,上述图2、图6、图8和图9中任一附图所示的方法流程中的各步骤均可以通过硬件形式的任务调度装置执行上述非易失性存储介质中存储的软件形式的程序代码实现。
需要说明的是,本发明实施例提供的任务调度装置中你功能模块的具体描述可以参考本发明方法实施例中对应部分的相关描述,本实施例这里不再赘述。
本发明实施例提供的任务调度装置,可以以数据块为中心,多个任务中的每个任务分别添加到与该任务对应的数据块的任务队列;然后采用N个线程中的每个线程分别执行一个任务队列中的任务。如此,即使多个线程并行运行,由于采用该多个线程中每一个线程针对不同的数据块,执行不同数据块的任务队列中的任务;因此,不会存在多个线程同时竞争一个数据块或者一个数据块的锁的问题。
即通过本方案,可以减少采用多个线程并行执行任务时,多个线程同时访问一个数据块而引发的数据竞争,从而可以提高任务调度的效率。并且,由于本方案中无需引入锁机制,因此可以避免引入锁带来的额外性能开销,降低并发错误的检测和调试难度。
此外,在本发明实施例中,一个线程在一定的时间段内,会逐个执行一个数据块的任务队列中的任务,即一个线程在一定的时间段内针对同一数据块,执行该数据块对应的任务;那么该线程在一定时间段内进行多次任务切换前后处理的数据是相同的。如此,可以避免了传统任务并行系统中因任务切换前后处理不同的数据而导致的大量缓存(cache)行换出换入的问题,从而可以提高访存效率,提高程序的性能。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

Claims (13)

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.根据权利要求2-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.根据权利要求8-10中任一项所述的装置,其特征在于,所述多个任务包括属于第二队列的第一任务,所述第一任务在被第一线程执行的过程中等待来自第三队列的任务执行结果,所述第一线程为所述N个线程中用于执行所述第二队列中的任务的线程,所述第二队列为所述等待队列组中的任一任务队列,所述第三队列为所述等待队列组中不同于所述第二队列的任务队列;所述装置还包括:
任务控制模块,用于将所述第一线程退出执行正在等待所述任务执行结果的所述第一任务;
相应的,所述任务添加模块,还用于将退出执行的所述第一任务添加至所述第三队列;
所述任务执行模块,还用于待所述第一任务获得所述任务执行结果后,采用第二线程执行所述第二队列中的所述第一任务;
其中,所述第二线程为所述N个线程中执行完相应的任务队列中的任务的线程;或者,所述第二线程为所述N个线程中退出执行相应的任务队列中的任务的线程。
12.根据权利要求10所述的装置,其特征在于,所述队列删除模块,还用于将所述等待队列组中被所述N个线程中的线程执行的任务所在的任务队列删除。
13.一种任务调度装置,其特征在于,所述装置包括:一个或多个处理器、存储器、总线和通信接口;
所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述任务调度装置运行时,所述处理器执行所述存储器存储的所述计算机执行指令,以使所述任务调度装置执行如权利要求1-6任意一项所述的任务调度方法。
CN201610188139.2A 2016-03-29 2016-03-29 一种任务调度方法及装置 Active CN105893126B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201610188139.2A CN105893126B (zh) 2016-03-29 2016-03-29 一种任务调度方法及装置
EP16896547.3A EP3425502B1 (en) 2016-03-29 2016-10-13 Task scheduling method and device
PCT/CN2016/102055 WO2017166777A1 (zh) 2016-03-29 2016-10-13 一种任务调度方法及装置
US16/145,607 US10891158B2 (en) 2016-03-29 2018-09-28 Task scheduling method and apparatus

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610188139.2A CN105893126B (zh) 2016-03-29 2016-03-29 一种任务调度方法及装置

Publications (2)

Publication Number Publication Date
CN105893126A CN105893126A (zh) 2016-08-24
CN105893126B true CN105893126B (zh) 2019-06-11

Family

ID=57014916

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610188139.2A Active CN105893126B (zh) 2016-03-29 2016-03-29 一种任务调度方法及装置

Country Status (4)

Country Link
US (1) US10891158B2 (zh)
EP (1) EP3425502B1 (zh)
CN (1) CN105893126B (zh)
WO (1) WO2017166777A1 (zh)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105893126B (zh) 2016-03-29 2019-06-11 华为技术有限公司 一种任务调度方法及装置
CN108228240B (zh) * 2016-12-14 2021-02-26 北京国双科技有限公司 多任务队列中任务的处理方法和装置
CN106991071B (zh) * 2017-03-31 2021-05-18 联想(北京)有限公司 内核调度方法及系统
CN107301087A (zh) * 2017-06-28 2017-10-27 郑州云海信息技术有限公司 一种多线程系统的性能提升方法和装置
CN107608773B (zh) * 2017-08-24 2020-08-04 阿里巴巴集团控股有限公司 任务并发处理方法、装置及计算设备
CN107526551B (zh) * 2017-09-14 2020-03-31 郑州云海信息技术有限公司 一种cpu多核的io请求处理方法、装置及设备
CN108182158A (zh) * 2018-01-12 2018-06-19 江苏华存电子科技有限公司 一种应用在存储系统中的任务调度优化方法
CN108509277A (zh) * 2018-04-03 2018-09-07 中国电子科技集团公司第七研究所 电子锁串口异步接收处理系统及方法
CN110543148B (zh) * 2018-05-28 2021-04-09 华为技术有限公司 一种任务调度方法及装置
CN109725995B (zh) * 2018-06-15 2024-04-12 中国平安人寿保险股份有限公司 数据抽取任务执行方法、装置、设备及可读存储介质
CN110673944B (zh) * 2018-07-03 2022-09-09 杭州海康威视数字技术股份有限公司 执行任务的方法和装置
CN109120550B (zh) * 2018-07-18 2019-10-08 武汉绿色网络信息服务有限责任公司 一种无锁化处理方法和装置
CN108958944A (zh) * 2018-07-26 2018-12-07 郑州云海信息技术有限公司 一种多核处理系统及其任务分配方法
CN109117260B (zh) * 2018-08-30 2021-01-01 百度在线网络技术(北京)有限公司 一种任务调度方法、装置、设备和介质
CN109840149B (zh) * 2019-02-14 2021-07-30 百度在线网络技术(北京)有限公司 任务调度方法、装置、设备及存储介质
CN109933426B (zh) * 2019-02-19 2021-06-25 北京三快在线科技有限公司 服务调用的处理方法、装置、电子设备及可读存储介质
CN111045797A (zh) * 2019-10-31 2020-04-21 华控清交信息科技(北京)有限公司 任务调度执行方法、相关装置和介质
CN111145410B (zh) * 2019-12-18 2021-09-03 宁波博太科智能科技股份有限公司 一种门禁权限计算方法
CN111290846B (zh) * 2020-02-26 2023-08-18 杭州涂鸦信息技术有限公司 一种分布式任务调度方法及系统
CN111475300B (zh) * 2020-04-09 2023-06-23 江苏盛海智能科技有限公司 一种多线程多任务管理方法及终端
CN111488220A (zh) * 2020-04-09 2020-08-04 北京字节跳动网络技术有限公司 一种启动请求处理方法、装置和电子设备
CN111736976B (zh) * 2020-06-30 2023-08-15 中国工商银行股份有限公司 任务处理方法、装置、计算设备和介质
CN112860401B (zh) * 2021-02-10 2023-07-25 北京百度网讯科技有限公司 任务调度方法、装置、电子设备和存储介质
CN113342898B (zh) * 2021-06-29 2022-10-04 杭州数梦工场科技有限公司 数据同步方法及装置
CN113703941A (zh) * 2021-08-30 2021-11-26 竞技世界(北京)网络技术有限公司 任务调度方法、系统及电子设备
WO2023077436A1 (en) * 2021-11-05 2023-05-11 Nvidia Corporation Thread specialization for collaborative data transfer and computation
CN114528113B (zh) * 2022-04-24 2022-08-23 广州中望龙腾软件股份有限公司 一种线程锁管理系统、方法、设备和可读介质
CN115114359B (zh) * 2022-05-27 2023-11-14 马上消费金融股份有限公司 用户数据处理方法及装置
CN115080247B (zh) * 2022-08-15 2022-11-04 科来网络技术股份有限公司 一种高可用线程池切换方法及装置
CN115292025A (zh) * 2022-09-30 2022-11-04 神州数码融信云技术服务有限公司 任务调度方法及装置、计算机设备及计算机可读存储介质
CN116450324A (zh) * 2023-06-20 2023-07-18 北京超星未来科技有限公司 任务处理方法、装置、设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102541653A (zh) * 2010-12-24 2012-07-04 新奥特(北京)视频技术有限公司 一种多任务线程池调度方法和系统
CN103955491A (zh) * 2014-04-15 2014-07-30 南威软件股份有限公司 一种定时数据增量同步的方法
CN104375882A (zh) * 2014-11-21 2015-02-25 北京应用物理与计算数学研究所 匹配于高性能计算机结构的多级嵌套数据驱动计算方法
CN104899099A (zh) * 2015-05-26 2015-09-09 北京金和网络股份有限公司 一种基于线程池的任务分配方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
IL137085A (en) * 2000-06-29 2004-08-31 Eci Telecom Ltd Method for effective utilizing of shared resources in computerized systems
US7650601B2 (en) * 2003-12-04 2010-01-19 International Business Machines Corporation Operating system kernel-assisted, self-balanced, access-protected library framework in a run-to-completion multi-processor environment
CN101005486B (zh) * 2006-12-28 2011-07-27 金蝶软件(中国)有限公司 一种资源访问控制方法及系统
US8549524B2 (en) * 2009-12-23 2013-10-01 Sap Ag Task scheduler for cooperative tasks and threads for multiprocessors and multicore systems
US8381004B2 (en) * 2010-05-26 2013-02-19 International Business Machines Corporation Optimizing energy consumption and application performance in a multi-core multi-threaded processor system
US9928105B2 (en) * 2010-06-28 2018-03-27 Microsoft Technology Licensing, Llc Stack overflow prevention in parallel execution runtime
US8954986B2 (en) * 2010-12-17 2015-02-10 Intel Corporation Systems and methods for data-parallel processing
CN102902573B (zh) * 2012-09-20 2014-12-17 北京搜狐新媒体信息技术有限公司 一种基于共享资源的任务的处理方法及装置
US9250953B2 (en) * 2013-11-12 2016-02-02 Oxide Interactive Llc Organizing tasks by a hierarchical task scheduler for execution in a multi-threaded processing system
WO2015070789A1 (en) * 2013-11-14 2015-05-21 Mediatek Inc. Task scheduling method and related non-transitory computer readable medium for dispatching task in multi-core processor system based at least partly on distribution of tasks sharing same data and/or accessing same memory address (es)
CN105893126B (zh) * 2016-03-29 2019-06-11 华为技术有限公司 一种任务调度方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102541653A (zh) * 2010-12-24 2012-07-04 新奥特(北京)视频技术有限公司 一种多任务线程池调度方法和系统
CN103955491A (zh) * 2014-04-15 2014-07-30 南威软件股份有限公司 一种定时数据增量同步的方法
CN104375882A (zh) * 2014-11-21 2015-02-25 北京应用物理与计算数学研究所 匹配于高性能计算机结构的多级嵌套数据驱动计算方法
CN104899099A (zh) * 2015-05-26 2015-09-09 北京金和网络股份有限公司 一种基于线程池的任务分配方法

Also Published As

Publication number Publication date
CN105893126A (zh) 2016-08-24
US10891158B2 (en) 2021-01-12
EP3425502B1 (en) 2022-04-20
US20190034230A1 (en) 2019-01-31
EP3425502A4 (en) 2019-03-27
EP3425502A1 (en) 2019-01-09
WO2017166777A1 (zh) 2017-10-05

Similar Documents

Publication Publication Date Title
CN105893126B (zh) 一种任务调度方法及装置
Bai et al. {PipeSwitch}: Fast pipelined context switching for deep learning applications
CN112465129B (zh) 片内异构人工智能处理器
US9436510B2 (en) System and method for managing the interleaved execution of threads
CN111052149B (zh) 用于确定网络中的内存需求的方法和装置
US8082420B2 (en) Method and apparatus for executing instructions
US7822885B2 (en) Channel-less multithreaded DMA controller
CN112463709A (zh) 可配置的异构人工智能处理器
US20070150895A1 (en) Methods and apparatus for multi-core processing with dedicated thread management
US9875139B2 (en) Graphics processing unit controller, host system, and methods
US20090300629A1 (en) Scheduling of Multiple Tasks in a System Including Multiple Computing Elements
CN110308982B (zh) 一种共享内存复用方法及装置
CN107122245A (zh) Gpu任务调度方法及系统
TWI666551B (zh) 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
CN112416585A (zh) 面向深度学习的gpu资源管理与智能化调度方法
CN114168271A (zh) 一种任务调度方法、电子设备及存储介质
US20060146864A1 (en) Flexible use of compute allocation in a multi-threaded compute engines
IL264794B2 (en) Scheduling of tasks on a multi-processor device
US7518993B1 (en) Prioritizing resource utilization in multi-thread computing system
US20150212859A1 (en) Graphics processing unit controller, host system, and methods
US11392388B2 (en) System and method for dynamic determination of a number of parallel threads for a request
Pang et al. Efficient CUDA stream management for multi-DNN real-time inference on embedded GPUs
US9619277B2 (en) Computer with plurality of processors sharing process queue, and process dispatch processing method
CN111459620A (zh) 安全容器操作系统到虚拟机监控器的信息调度方法
Faverge et al. Dynamic scheduling for sparse direct solver on NUMA architectures

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant