CN113703941A - 任务调度方法、系统及电子设备 - Google Patents
任务调度方法、系统及电子设备 Download PDFInfo
- Publication number
- CN113703941A CN113703941A CN202111002574.9A CN202111002574A CN113703941A CN 113703941 A CN113703941 A CN 113703941A CN 202111002574 A CN202111002574 A CN 202111002574A CN 113703941 A CN113703941 A CN 113703941A
- Authority
- CN
- China
- Prior art keywords
- task
- thread
- tasks
- post
- sequence
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 44
- 238000012545 processing Methods 0.000 claims abstract description 10
- 230000001419 dependent effect Effects 0.000 claims description 43
- 238000005538 encapsulation Methods 0.000 claims description 13
- 230000008569 process Effects 0.000 claims description 6
- 239000000126 substance Substances 0.000 claims description 2
- 230000003993 interaction Effects 0.000 abstract description 4
- 238000004904 shortening Methods 0.000 abstract description 2
- 238000004891 communication Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000007717 exclusion Effects 0.000 description 2
- 238000004883 computer application Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling 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)
Abstract
本申请实施例公开了一种任务调度方法、系统及电子设备,通过逻辑线程将等待任务序列以及未连接任务序列发送给连接线程;未连接任务序列中的任务为逻辑线程建立的不存在依赖任务的任务;通过连接线程在未连接任务序列中查询目标任务,目标任务为未连接任务序列中,后置任务包括等待任务序列中的至少一个未完成的任务的任务;若查询到目标任务,通过连接线程将目标任务发送给所述逻辑线程;通过逻辑线程将目标任务插入逻辑线程任务无锁队列,以便连接线程和工作线程偷取目标任务并执行。本申请通过逻辑线程与连接线程的交互,实现了优先处理等待任务序列的目的,从而缩短等待任务序列等待执行的时间,提高了等待任务序列的执行效率。
Description
技术领域
本申请涉及计算机应用技术领域,更具体地说,涉及一种任务调度方法、系统及电子设备。
背景技术
在支持任务依赖的多线程并发任务调度系统中,如果一个任务A的执行依赖于另一个任务B的执行,则任务A需要等任务B完成后才能被执行。在一些场景下,有执行完成特定任务序列的需求,基于此,如果特定任务序列中的任务的执行依赖于至少一个其它任务(该其它任务不属于特定任务序列)的执行,则特定任务序列中的任务需要等上述至少一个其它任务全部都执行完才能被执行,而其它任务什么时候执行是不确定的,导致特定任务序列的执行效率较低。
发明内容
本申请的目的是提供一种任务调度方法、系统及电子设备,包括如下技术方案:
一种任务调度方法,包括:
通过逻辑线程将等待任务序列以及未连接任务序列发送给连接线程;所述未连接任务序列中的任务为所述逻辑线程建立的不存在依赖任务的任务;
通过所述连接线程在所述未连接任务序列中查询目标任务,所述目标任务为所述未连接任务序列中,后置任务包括所述等待任务序列中的至少一个未完成的任务的任务;
若查询到目标任务,通过所述连接线程将所述目标任务发送给所述逻辑线程;
通过所述逻辑线程将所述目标任务插入逻辑线程任务无锁队列,以便所述连接线程和工作线程偷取所述目标任务并执行。
上述方法,优选的,所述连接线程在所述未连接任务序列中查询目标任务包括:
所述连接线程查询所述等待任务序列中所有未完成的任务;
对于所述未连接任务序列中的每一个任务T,所述连接线程遍历以所述任务T为根节点的任务树,以查询所述任务树中是否存在至少一个所述未完成的任务;所述任务树中相互连接的两个节点为具有依赖关系的两个任务;
若所述任务树中存在至少一个所述未完成任务,将所述任务T确定位目标任务。
上述方法,优选的,还包括:
通过所述工作线程偷取目标无锁队列中的任务并执行;所述目标无锁队列至少包括所述逻辑线程任务无锁队列,以及存储有所述连接线程插入的依赖任务均已执行完成的任务的连接线程任务无锁队列;
通过所述工作线程将执行完成的任务插入所述工作线程对应的减少后置任务无锁队列中;
通过所述连接线程获取增加后置任务无锁队列中的封装包并执行,以建立所述封装包中的至少两个任务的依赖关系,并确定是否增加所述至少两个任务中的后置任务的引用计数,所述引用计数用于确定所述后置任务的所有依赖任务的数量;所述封装包由所述逻辑线程建立所述后置任务时生成;
通过所述连接线程根据各工作线程对应的减少后置任务无锁队列确定需要减少引用计数的后置任务并减少该后置任务的引用计数,在任一后置任务的引用计数为目标值时,将该后置任务插入所述连接线程任务无锁队列中。
上述方法,优选的,所述未连接任务序列存储于逻辑线程任务缓存队列中,所述方法还包括:
在所述逻辑线程任务缓存队列中的元素个数达到最大缓存个数时,通过所述逻辑线程将所述逻辑线程任务缓存队列中的元素插入所述逻辑线程任务无锁队列中,以便所述连接线程和工作线程偷取所述未连接任务序列中的任务并执行。
上述方法,优选的,还包括:
通过所述逻辑线程检查所述等待任务序列是否已完成;
若检查结果为否,通过所述逻辑线程偷取所述连接线程任务无锁队列中的任务并执行。
上述方法,优选的,还包括:
若所述连接线程任务无锁队列为空,所述逻辑线程等待一个中央处理器时间片后,返回执行所述检查所述等待任务序列是否已完成的步骤。
上述方法,优选的,所述连接线程确定是否增加所述至少两个任务中的后置任务的引用计数的过程,包括:
所述连接线程检查所述至少两个任务中的依赖任务是否完成;
若所述至少两个任务中的所有依赖任务均已经完成,则保持所述至少两个任务中的后置任务的引用计数不变;
若所述至少两个任务中的M个依赖任务均未完成,则将所述后置任务的引用计数加M。
上述方法,优选的,所述连接线程根据各工作线程对应的减少后置任务无锁队列确定需要减少引用计数的后置任务并减少该后置任务的引用计数,包括:
对于所述减少后置任务无锁队列中的任一任务P,寻找所述任务P的所有后置任务PP;
将各后置任务PP的引用计数分别减1。
一种任务调度系统,包括:逻辑线程、连接线程和工作线程;其中,
所述逻辑线程用于将等待任务序列以及未连接任务序列发送给连接线程;所述未连接任务序列中的任务为所述逻辑线程建立的不存在依赖任务的任务;
所述连接线程用于在所述未连接任务序列中查询目标任务,所述目标任务为所述未连接任务序列中,后置任务包括所述等待任务序列中的至少一个未完成的任务的任务;若查询到目标任务,将所述目标任务发送给所述逻辑线程;
所述逻辑线程还用于将所述目标任务插入逻辑线程任务无锁队列,以便所述连接线程和工作线程偷取所述目标任务并执行。
一种电子设备,包括:
存储器,用于存储程序;
处理器,用于调用并执行所述存储器中的所述程序,通过执行所述程序实现如上任一项所述的任务调度方法的各个步骤。
通过以上方案可知,本申请提供的一种任务调度方法、系统及电子设备,通过逻辑线程将等待任务序列以及未连接任务序列发送给连接线程;未连接任务序列中的任务为逻辑线程建立的不存在依赖任务的任务;通过连接线程在未连接任务序列中查询目标任务,目标任务为未连接任务序列中,后置任务包括等待任务序列中的至少一个未完成的任务的任务;若查询到目标任务,通过连接线程将目标任务发送给所述逻辑线程;通过逻辑线程将目标任务插入逻辑线程任务无锁队列,以便连接线程和工作线程偷取目标任务并执行。本申请通过逻辑线程与连接线程的交互,实现了优先处理目标任务(即后置任务中包括等待任务序列中未完成任务的未连接任务序列中的任务)的目的,从而缩短等待任务序列等待执行的时间,提高了等待任务序列的执行效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的任务调度方法的一种实现流程图;
图2为本申请实施例提供的连接线程在未连接任务序列中查询目标任务的一种实现流程图;
图3为本申请实施例提供的任务调度系统的一种结构示意图;
图4为本申请实施例提供的电子设备的一种结构示意图。
说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的部分,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例,能够以除了在这里图示的以外的顺序实施。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了更好的理解本申请,首先对本申请实施例中涉及到的一些术语进行解释说明。
任务:是指在计算机中的一段程序,能够完成特定的功能。
任务系统:一种在计算机中能用来并发执行多种关联或无关联任务的子系统程序,主要通过多线程的方式来提高任务的执行效率。
任务依赖:是指某一个任务的执行依赖于另一个任务的执行。
后置任务:某一个任务的后置任务是指必须等前面的任务完成后,后面的这个任务才能被执行,则后面的这个任务就是后置任务。比如,任务PP必须等任务P执行完成后,才能被执行,则任务PP是任务P的后置任务,任务P是任务PP的依赖任务。一个任务可以存在多个依赖任务,也可以存在多个后置任务。
线程:线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,不同的线程并行执行不同的任务。
下面对本申请的实施例进行说明。本申请的基本思想是引入连接线程,由逻辑线程和连接线程交互,以便连接线程来维护任务间的执行顺序。
如图1所示,为本申请实施例提供的任务调度方法的一种实现流程图,可以包括:
步骤S101:通过逻辑线程将等待任务序列以及未连接任务序列发送给连接线程;其中,未连接任务序列中的任务为逻辑线程建立的不存在依赖任务的任务。
本申请实施例中,逻辑线程可以根据任务数据生成新建任务,其中,任务数据是指用户配置的用于生成新任务的数据,任务数据还用于指示新建任务是否存在依赖任务,以及该依赖任务是哪个任务。
如果任务数据表征新建任务存在依赖任务,逻辑线程可以将新建任务及其依赖任务封装成封装包插入增加后置任务无锁队列,该增加后置任务无锁队列是连接线程对应的一个无锁队列,该无锁队列中的元素是封装包,该封装包中封装有存在依赖关系的至少两个任务,该至少两个任务中的一个任务属于该至少两个任务中的其它任务的后置任务。增加后置任务无锁队列用于连接线程建立封装包中的至少两个任务的依赖关系,并确定是否增加该至少两个任务中的后置任务的引用计数,该引用计数用于确定至少两个任务中的后置任务的所有依赖任务的数量。
如果任务数据表征新建任务不存在依赖任务,逻辑线程将新建任务插入逻辑线程任务缓存队列,该逻辑线程任务缓存队列中存储的多个任务即是未连接任务序列。
可选的,如果逻辑线程任务缓存队列中任务的个数达到最大缓存个数,将逻辑线程任务缓存队列中的任务插入逻辑线程任务无锁队列,以便连接线程和工作线程偷取逻辑线程任务无锁队列中的任务并执行。
等待任务序列当然也是由逻辑线程建立的,该等待任务序列中的任务除了按照前述方式存储到增加后置任务无锁队列或逻辑线程任务缓存队列外,还会以序列的形式单独进行记录,比如,将等待任务序列插入预置的等待任务缓存队列中,以便逻辑线程将等待任务序列发送给连接线程。
可选的,逻辑线程可以在每次未连接任务序列中任务的个数达到阈值(比如,未连接任务序列中任务的个数达到逻辑线程任务缓存队列的最大缓存个数),且等待任务序列还未完成时,将等待任务序列以及未连接任务序列发送给连接线程。
步骤S102:通过连接线程在未连接任务序列中查询目标任务,目标任务为未连接任务序列中,后置任务包括等待任务序列中的至少一个未完成的任务的任务。
可选的,一个任务A的后置任务包括任务A的直接后置任务和间接后置任务,其中,任务A的直接后置任务B是指任务A完成后就可以执行任务B了,而任务A的间接后置任务C是指任务C是任务A的后置任务(包括直接后置任务和间接后置任务)的后置任务,比如,任务C是任务B的后置任务,则任务C是任务A的间接后置任务,比如,任务D是任务C的后置任务,则任务D也是任务A的后置任务。
如果未连接任务序列中的第q个任务的后置任务中包括等待任务序列中的至少一个未完成的任务,则将未连接任务序列中的第q个任务确定为目标任务。
步骤S103:若查询到目标任务,通过连接线程将目标任务发送给逻辑线程。
连接线程可以将目标任务插入逻辑线程的一个缓存队列中,为便于区分,记为中转缓存队列。
步骤S104:通过逻辑线程将目标任务插入逻辑线程任务无锁队列,以便连接线程和工作线程偷取目标任务并执行。
逻辑线程从中转缓存队列中读取目标任务后插入逻辑线程任务无锁队列。
任务系统中通常会设置多个工作线程,多个工作线程可以同时运行,步骤S104中的工作线程是指任务系统中的任意一个工作线程。
本申请实施例中,连接线程和工作线程可以偷取逻辑线程任务无锁队列中的任务并执行。
本申请实施例提供的任务调度方法,通过逻辑线程与连接线程的交互,实现了优先处理后置任务中包括等待任务序列中未完成任务的未连接任务序列中的任务的目的,从而缩短等待任务序列等待执行的时间,提高了等待任务序列的执行效率。
在一可选的实施例中,上述连接线程在未连接任务序列中查询目标任务的一种实现流程图如图2所示,可以包括:
步骤S201:连接线程查询等待任务序列中所有未完成的任务。
对于等待任务序列中任意一个任务,为便于叙述,记为第j个任务,可以根据第j个任务的引用计数判断第j个任务是否完成。可选的,如果第j个任务的引用计数大于1,说明第j个任务的依赖任务还未完成,此时第j个任务还未被执行,因此,第j个任务还未完成,如果第j个任务的引用计数为1,说明第j个任务的依赖任务已经执行完成,可以执行第j个任务,但第j个任务要么还未被执行,要么正在被执行中,但还未执行完成。如果第j个任务的引用计数为0,说明第j个任务已执行完成。基于此,只要第j个任务的引用计数大于0,则说明第j个任务还未完成,否则,说明第j个任务已经完成。
步骤S202:对于未连接任务序列中的每一个任务T,连接线程遍历以任务T为根节点的任务树,以查询任务树中是否存在等待任务序列中的至少一个未完成的任务;若存在,执行步骤S203。其中,任务树中相互连接的两个节点为具有依赖关系的两个任务,其中相互连接的两个节点中,位于子节点的任务为位于父节点的任务的后置任务,也就是说,位于父节点的任务是位于子节点的任务的依赖任务。
任务树可以在连接线程根据增加后置任务无锁队列建立任务间的依赖关系时生成。
步骤S203:将任务T确定位目标任务。
在一可选的实施例中,本申请实施例提供的任务调度方法还可以包括:
通过工作线程偷取目标无锁队列中的任务并执行;其中,目标无锁队列至少包括上述逻辑线程任务无锁队列,以及存储有连接线程插入的依赖任务均已执行完成的任务的连接线程任务无锁队列。
也就是说,逻辑线程任务无锁队列中存储的任务不存在依赖任务。连接线程任务无锁队列中存储的任务是存在依赖任务且依赖任务已完成的任务,具体的,连接线程任务无锁队列中第i个任务(记为ConnectQ_i)是存在依赖任务的,且ConnectQ_i的所有依赖任务均已执行完成,i=1,2,3,……。
通过工作线程将执行完成的任务插入工作线程对应的减少后置任务无锁队列中,即,第k个工作线程将执行完成的任务插入第k个工作现场对应的减少后置任务无锁队列中。
本申请实施例中,每一个工作现场对应一个无锁队列,该无锁队列记为减少后置任务无锁队列。第k个工作线程每执行完一个任务,将该任务插入第k个工作线程对应的减少后置任务无锁队列中,以便连接线程确定是否需要将减少后置任务无锁队列中的任务的后置任务的引用计数减小。
通过连接线程获取增加后置任务无锁队列中的封装包并执行,以建立封装包中的至少两个任务的依赖关系,并确定是否增加至少两个任务中的后置任务的引用计数,该引用计数用于确定后置任务的所有依赖任务的数量;封装包由所述逻辑线程建立所述后置任务时生成。
可选的,连接线程确定是否增加至少两个任务中的后置任务的引用计数时,具体可以包括:
连接线程检查上述至少两个任务中的依赖任务是否均已完成,若是,则保持上述至少两个任务中的后置任务的引用计数不便,若否,则将上述至少两个任务中的后置任务的引用计数加M,M为上述至少两个任务中未执行的依赖任务的数量。也就是说,如果上述至少两个任务中的依赖任务中有M个依赖任务未完成时,将上述至少两个任务中的后置任务的引用计数加M,表明上述至少两个任务中的后置任务的依赖任务增加了M个。
在上述至少两个任务中的所有依赖任务均已完成的情况下,连接线程还可以判断上述至少两个任务中的后置任务的引用计数是否为目标值;若判断结果为是,将上述至少两个任务中的后置任务插入连接线程任务无锁队列中。其中,在上述至少两个任务中的后置任务的引用计数为目标值时,说明上述至少两个任务中的后置任务的所有依赖任务均已完成,可以执行上述至少两个任务中的后置任务了。
通过连接线程根据各工作线程对应的减少后置任务无锁队列确定需要减少引用计数的后置任务并减少该后置任务的引用计数,在任一后置任务的引用计数为目标值时,将该后置任务插入连接线程任务无锁队列中。
当引用计数的取值为目标值时,认为后置任务的所有依赖任务均已完成。
具体的,对应减少后置任务无锁队列中的任一任务(为便于叙述,记为P),寻找任务P的所有后置任务(为便于叙述,记为PP);
将各个任务PP的引用计数分别减1。由于减少后置任务无锁队列中的任务均是已执行完的任务,因此,以该任务作为依赖任务的后置任务的引用计数需要减一。
本申请实施例提供的任务调度方法,将任务之间的依赖关系交由连接线程来处理,使得在建立新任务与既有任务的连接关系的时候,不需要使用互斥锁来暂停当前既有任务的执行,工作线程在执行当前既有任务的时候也不需要使用互斥锁来暂停当前线程的运行,从而提高了任务调度的效率。
在一可选的实施例中,本申请实施例提供的任务调度方法还可以包括:
通过逻辑线程检查等待任务序列是否已完成;若等待任务序列未完成,通过逻辑线程偷取连接线程任务无锁队列中的任务并执行。若等待任务序列已完成,则可以返回等待任务序列执行成功的消息。
逻辑线程可以基于等待任务序列中的各个任务的引用计数判断等待任务序列是否完成,具体的,在等待任务序列中的各个任务的引用计数均为0时,说明等待任务序列已完成,否则,说明等待任务序列还未完成。
本申请实施例中,在等待任务序列还未完成的情况下,逻辑线程可以偷取连接线程任务无锁队列中的任务并执行,在等待等待任务序列被执行的同时分担了工作线程的工作量,从而进一步提高任务调度效率。
可选的,通过逻辑线程偷取连接线程任务无锁队列中的任务时,如果连接线程任务无锁队列为空,则逻辑线程可以等待一个中央处理器时间片后,再返回执行上述检查等待任务序列是否已完成,并在等待任务序列未完成时,偷取连接线程任务无锁队列中的任务并执行的步骤。
可选的,工作线程在偷取目标无锁队列中的任务并执行时,可以先偷取逻辑线程无锁队列中的任务并执行,将执行完成的任务插入工作线程对应的减少后置任务无锁队列,在逻辑线程无锁队列中的任务均执行完成后,再偷取连接线程任务无锁队列中的任务并执行,并将执行完的任务插入工作线程对应的减少后置任务无锁队列中。
当然,工作线程也可以先偷取连接线程任务无锁队列中的任务并执行,将执行完的任务插入工作线程对应的减少后置任务无锁队列中,在连接线程任务无锁队列中的任务均执行完成后,再偷取逻辑线程无锁队列中的任务并执行,将执行完成的任务插入工作线程对应的减少后置任务无锁队列中。
可选的,连接线程可以在减少后置任务无锁队列为空时,偷取逻辑线程任务无锁队列中的任务并执行,每执行完逻辑线程任务无锁队列中的一个任务,如果该任务存在后置任务,将该任务的后置任务的引用计数减1;如果该任务的后置任务的引用计数为1,则将该任务的后置任务插入连接线程任务无锁队列,以便工作线程偷取连接线程任务无锁队列中的任务并执行。
与方法实施例相对应,本申请实施例还提供一种任务调度系统,本申请实施例提供的任务调度系统的一种结构示意图如图3所示,可以包括:
逻辑线程301,连接线程302和工作线程303;其中,工作线程303包括多个;
所述逻辑线程301用于将等待任务序列以及未连接任务序列发送给连接线程302;所述未连接任务序列中的任务为所述逻辑线程建立的不存在依赖任务的任务;
所述连接线程302用于在所述未连接任务序列中查询目标任务,所述目标任务为所述未连接任务序列中,后置任务包括所述等待任务序列中的至少一个未完成的任务的任务;若查询到目标任务,将所述目标任务发送给所述逻辑线程;
所述逻辑线程301还用于将所述目标任务插入逻辑线程任务无锁队列,以便所述连接线程302和工作线程303偷取所述目标任务并执行。
本申请实施例提供的任务调度系统,通过逻辑线程与连接线程的交互,实现了优先处理后置任务中包括等待任务序列中未完成任务的未连接任务序列中的任务的目的,从而缩短等待任务序列等待执行的时间,提高了等待任务序列的执行效率。
在一可选的实施例中,所述连接线程在所述未连接任务序列中查询目标任务时,用于:
查询所述等待任务序列中所有未完成的任务;
对于所述未连接任务序列中的每一个任务T,遍历以所述任务T为根节点的任务树,以查询所述任务树中是否存在至少一个所述未完成的任务;所述任务树中相互连接的两个节点为具有依赖关系的两个任务;
若所述任务树中存在至少一个所述未完成任务,将所述任务T确定位目标任务。
在一可选的实施例中,所述工作线程用于偷取目标无锁队列中的任务并执行;所述目标无锁队列至少包括所述逻辑线程任务无锁队列,以及存储有所述连接线程插入的依赖任务均已执行完成的任务的连接线程任务无锁队列;
所述工作线程用于将执行完成的任务插入所述工作线程对应的减少后置任务无锁队列中;
所述连接线程还用于获取增加后置任务无锁队列中的封装包并执行,以建立所述封装包中的至少两个任务的依赖关系,并确定是否增加所述至少两个任务中的后置任务的引用计数,所述引用计数用于确定所述后置任务的所有依赖任务的数量;所述封装包由所述逻辑线程建立所述后置任务时生成;
所述连接线程还用于根据各工作线程对应的减少后置任务无锁队列确定需要减少引用计数的后置任务并减少该后置任务的引用计数,在任一后置任务的引用计数为目标值时,将该后置任务插入所述连接线程任务无锁队列中。
在一可选的实施例中,所述未连接任务序列存储于逻辑线程任务缓存队列中,所述逻辑线程还用于:
在所述逻辑线程任务缓存队列中的元素个数达到最大缓存个数时,将所述逻辑线程任务缓存队列中的元素插入所述逻辑线程任务无锁队列中,以便所述连接线程和工作线程偷取所述未连接任务序列中的任务并执行。
在一可选的实施例中,所述逻辑线程还用于:
检查所述等待任务序列是否已完成;
若检查结果为否,偷取所述连接线程任务无锁队列中任务并执行。
在一可选的实施例中,所述逻辑线程还用于:
若所述连接线程任务无锁队列为空,等待一个中央处理器时间片后,返回执行所述检查所述等待任务序列是否已完成的步骤。
在一可选的实施例中,所述连接线程确定是否增加所述至少两个任务中的后置任务的引用计数时,用于:
检查所述至少两个任务中的依赖任务是否完成;
若所述至少两个任务中的所有依赖任务均已经完成,则保持所述至少两个任务中的后置任务的引用计数不变;
若所述至少两个任务中的M个依赖任务均未完成,则将所述后置任务的引用计数加M。
在一可选的实施例中,所述连接线程根据各工作线程对应的减少后置任务无锁队列确定需要减少引用计数的后置任务并减少该后置任务的引用计数时,用于:
对于所述减少后置任务无锁队列中的任一任务P,寻找所述任务P的所有后置任务PP;
将各后置任务PP的引用计数分别减1。
与方法实施例相对应,本申请还提供一种电子设备,该电子设备的一种结构示意图如图4所示,可以包括:至少一个处理器1,至少一个通信接口2,至少一个存储器3和至少一个通信总线4;
在本发明实施例中,处理器1、通信接口2、存储器3、通信总线4的数量为至少一个,且处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信;
处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路等;
存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory)等,例如至少一个磁盘存储器;
其中,存储器3存储有程序,处理器1可调用存储器3存储的程序,所述程序用于:
通过逻辑线程将等待任务序列以及未连接任务序列发送给连接线程;所述未连接任务序列中的任务为所述逻辑线程建立的不存在依赖任务的任务;
通过所述连接线程在所述未连接任务序列中查询目标任务,所述目标任务为所述未连接任务序列中,后置任务包括所述等待任务序列中的至少一个未完成的任务的任务;
若查询到目标任务,通过所述连接线程将所述目标任务发送给所述逻辑线程;
通过所述逻辑线程将所述目标任务插入逻辑线程任务无锁队列,以便所述连接线程和工作线程偷取所述目标任务并执行。
可选的,所述程序的细化功能和扩展功能可参照上文描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
应当理解,本申请实施例中,从权、各个实施例、特征可以互相组合结合,都能实现解决前述技术问题。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种任务调度方法,其特征在于,包括:
通过逻辑线程将等待任务序列以及未连接任务序列发送给连接线程;所述未连接任务序列中的任务为所述逻辑线程建立的不存在依赖任务的任务;
通过所述连接线程在所述未连接任务序列中查询目标任务,所述目标任务为所述未连接任务序列中,后置任务包括所述等待任务序列中的至少一个未完成的任务的任务;
若查询到目标任务,通过所述连接线程将所述目标任务发送给所述逻辑线程;
通过所述逻辑线程将所述目标任务插入逻辑线程任务无锁队列,以便所述连接线程和工作线程偷取所述目标任务并执行。
2.根据权利要求1所述的方法,其特征在于,所述连接线程在所述未连接任务序列中查询目标任务包括:
所述连接线程查询所述等待任务序列中所有未完成的任务;
对于所述未连接任务序列中的每一个任务T,所述连接线程遍历以所述任务T为根节点的任务树,以查询所述任务树中是否存在至少一个所述未完成的任务;所述任务树中相互连接的两个节点为具有依赖关系的两个任务;
若所述任务树中存在至少一个所述未完成任务,将所述任务T确定位目标任务。
3.根据权利要求1所述的方法,其特征在于,还包括:
通过所述工作线程偷取目标无锁队列中的任务并执行;所述目标无锁队列至少包括所述逻辑线程任务无锁队列,以及存储有所述连接线程插入的依赖任务均已执行完成的任务的连接线程任务无锁队列;
通过所述工作线程将执行完成的任务插入所述工作线程对应的减少后置任务无锁队列中;
通过所述连接线程获取增加后置任务无锁队列中的封装包并执行,以建立所述封装包中的至少两个任务的依赖关系,并确定是否增加所述至少两个任务中的后置任务的引用计数,所述引用计数用于确定所述后置任务的所有依赖任务的数量;所述封装包由所述逻辑线程建立所述后置任务时生成;
通过所述连接线程根据各工作线程对应的减少后置任务无锁队列确定需要减少引用计数的后置任务并减少该后置任务的引用计数,在任一后置任务的引用计数为目标值时,将该后置任务插入所述连接线程任务无锁队列中。
4.根据权利要求3所述的方法,其特征在于,所述未连接任务序列存储于逻辑线程任务缓存队列中,所述方法还包括:
在所述逻辑线程任务缓存队列中的元素个数达到最大缓存个数时,通过所述逻辑线程将所述逻辑线程任务缓存队列中的元素插入所述逻辑线程任务无锁队列中,以便所述连接线程和工作线程偷取所述未连接任务序列中的任务并执行。
5.根据权利要求3所述的方法,其特征在于,还包括:
通过所述逻辑线程检查所述等待任务序列是否已完成;
若检查结果为否,通过所述逻辑线程偷取所述连接线程任务无锁队列中的任务并执行。
6.根据权利要求5所述的方法,其特征在于,还包括:
若所述连接线程任务无锁队列为空,所述逻辑线程等待一个中央处理器时间片后,返回执行所述检查所述等待任务序列是否已完成的步骤。
7.根据权利要求3所述的方法,其特征在于,所述连接线程确定是否增加所述至少两个任务中的后置任务的引用计数的过程,包括:
所述连接线程检查所述至少两个任务中的依赖任务是否完成;
若所述至少两个任务中的所有依赖任务均已经完成,则保持所述至少两个任务中的后置任务的引用计数不变;
若所述至少两个任务中的M个依赖任务均未完成,则将所述后置任务的引用计数加M。
8.根据权利要求3所述的方法,其特征在于,所述连接线程根据各工作线程对应的减少后置任务无锁队列确定需要减少引用计数的后置任务并减少该后置任务的引用计数,包括:
对于所述减少后置任务无锁队列中的任一任务P,寻找所述任务P的所有后置任务PP;
将各后置任务PP的引用计数分别减1。
9.一种任务调度系统,其特征在于,包括:逻辑线程、连接线程和工作线程;其中,
所述逻辑线程用于将等待任务序列以及未连接任务序列发送给连接线程;所述未连接任务序列中的任务为所述逻辑线程建立的不存在依赖任务的任务;
所述连接线程用于在所述未连接任务序列中查询目标任务,所述目标任务为所述未连接任务序列中,后置任务包括所述等待任务序列中的至少一个未完成的任务的任务;若查询到目标任务,将所述目标任务发送给所述逻辑线程;
所述逻辑线程还用于将所述目标任务插入逻辑线程任务无锁队列,以便所述连接线程和工作线程偷取所述目标任务并执行。
10.一种电子设备,其特征在于,包括:
存储器,用于存储程序;
处理器,用于调用并执行所述存储器中的所述程序,通过执行所述程序实现如权利要求1-8中任一项所述的任务调度方法的各个步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111002574.9A CN113703941A (zh) | 2021-08-30 | 2021-08-30 | 任务调度方法、系统及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111002574.9A CN113703941A (zh) | 2021-08-30 | 2021-08-30 | 任务调度方法、系统及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113703941A true CN113703941A (zh) | 2021-11-26 |
Family
ID=78656643
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111002574.9A Pending CN113703941A (zh) | 2021-08-30 | 2021-08-30 | 任务调度方法、系统及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113703941A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9286106B1 (en) * | 2013-04-16 | 2016-03-15 | Ca, Inc. | Scheduling periodic tasks with dependencies and determining improper loop dependencies between tasks placed in a waiting tasks set and in a unfinished dependent tasks set |
CN105893126A (zh) * | 2016-03-29 | 2016-08-24 | 华为技术有限公司 | 一种任务调度方法及装置 |
CN107220111A (zh) * | 2017-04-28 | 2017-09-29 | 华中科技大学 | 一种基于任务窃取的任务调度方法及系统 |
CN110908794A (zh) * | 2019-10-09 | 2020-03-24 | 上海交通大学 | 基于任务窃取算法的任务窃取方法及系统 |
CN111813554A (zh) * | 2020-07-17 | 2020-10-23 | 济南浪潮数据技术有限公司 | 一种任务调度处理方法、装置及电子设备和存储介质 |
-
2021
- 2021-08-30 CN CN202111002574.9A patent/CN113703941A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9286106B1 (en) * | 2013-04-16 | 2016-03-15 | Ca, Inc. | Scheduling periodic tasks with dependencies and determining improper loop dependencies between tasks placed in a waiting tasks set and in a unfinished dependent tasks set |
CN105893126A (zh) * | 2016-03-29 | 2016-08-24 | 华为技术有限公司 | 一种任务调度方法及装置 |
CN107220111A (zh) * | 2017-04-28 | 2017-09-29 | 华中科技大学 | 一种基于任务窃取的任务调度方法及系统 |
CN110908794A (zh) * | 2019-10-09 | 2020-03-24 | 上海交通大学 | 基于任务窃取算法的任务窃取方法及系统 |
CN111813554A (zh) * | 2020-07-17 | 2020-10-23 | 济南浪潮数据技术有限公司 | 一种任务调度处理方法、装置及电子设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
刘晓娴等: ""面向DSWP并行的OpenMP任务调度机制的扩展与实现"", 《计算机科学》, vol. 40, no. 9, 11 November 2013 (2013-11-11), pages 38 - 43 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104601696B (zh) | 服务处理方法、服务调用系统、装置和系统 | |
CN102081554A (zh) | 云计算操作系统及其内核控制系统及方法 | |
CN101477386B (zh) | 一种定时器实现方法和装置 | |
CN110704170A (zh) | 批量任务处理方法、装置、计算机设备和存储介质 | |
WO2023197864A1 (zh) | 一种调用拓扑图生成方法及装置 | |
CN105430028A (zh) | 服务调用方法、提供方法及节点 | |
CN109819674B (zh) | 计算机存储介质、嵌入式调度方法及系统 | |
CN113703941A (zh) | 任务调度方法、系统及电子设备 | |
CN112596904A (zh) | 一种基于量子云平台量子服务资源调用优化的方法 | |
CN116881003A (zh) | 资源分配方法、装置、服务设备及存储介质 | |
CN114756356A (zh) | 任务处理方法、工作节点设备、主节点设备及存储介质 | |
CN108830724A (zh) | 一种资源数据包处理方法及终端设备 | |
CN113672373A (zh) | 一种线程绑定的方法、装置及电子设备 | |
CN114201293A (zh) | Kafka中间件集群参数的修改方法、装置以及存储介质 | |
CN114564287A (zh) | 任务调度方法、手持式金融终端及可读存储介质 | |
CN109033189B (zh) | 链路结构日志的压缩方法、装置、服务器及可读存储介质 | |
CN113656374A (zh) | 带有附件的业务报文的处理方法及装置 | |
CN114118811A (zh) | 服务代码的生成、执行方法、装置、设备及存储介质 | |
JP2005107632A (ja) | Eaiサーバおよびeaiサーバのプログラム | |
CN116755868B (zh) | 任务处理系统及方法 | |
CN115914328B (zh) | 网络健康探测方法、装置、电子设备及存储介质 | |
CN111476663B (zh) | 一种数据处理方法、装置、节点设备及存储介质 | |
JP2012221147A (ja) | 計算機及びリソース管理方法 | |
CN111949407B (zh) | 一种资源分配方法及装置 | |
Abraham et al. | On the mailbox problem |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |