CN114168305A - 一种任务调度方法、装置、设备及存储介质 - Google Patents
一种任务调度方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN114168305A CN114168305A CN202210002802.0A CN202210002802A CN114168305A CN 114168305 A CN114168305 A CN 114168305A CN 202210002802 A CN202210002802 A CN 202210002802A CN 114168305 A CN114168305 A CN 114168305A
- Authority
- CN
- China
- Prior art keywords
- task
- current
- state
- blocked
- blocking
- 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
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
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/526—Mutual exclusion algorithms
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本公开涉及一种任务调度方法、装置、设备及存储介质,所述方法包括:获取当前任务对应的阻塞任务,其中,当前任务的任务状态是新建状态或暂停状态;确定当前任务对应的每个阻塞任务的任务状态;在确定当前任务对应的所有阻塞任务均为完成状态后,调度当前任务并执行当前任务逻辑。本公开的技术方案通过确定新建任务或者暂停任务对应的每个阻塞任务的任务状态,然后在其对应的所有阻塞任务均执行完成状态后,调度当前任务并执行当前任务逻辑,实现了所有阻塞任务均执行完成后触发执行当前任务,实现了DAG任务调度,简化了编排难度。
Description
技术领域
本公开涉及数据处理技术领域,尤其涉及一种任务调度方法、装置、设备及存储介质。
背景技术
随着科学技术的发展,任务调度系统逐渐广泛应用于各个领域。在任务调度系统中实现工作流,即在任务调度系统中实现任务的调度,能有效发挥任务调度系统的功效。
现有的任务调度系统,都是以Java技术栈为背景开发的分布式任务调度框架。其中,分布式任务调度平台QuartZ和xxl-Job不支持以有向无环图(Directed AcyclicGraph,DAG)方式编排任务,PowerJob支持以DAG方式静态编排任务。当明确知道所有任务及任务间的依赖关系时,可以静态编排各个任务间的阻塞关系,然后统一触发执行。
然而,有些任务的依赖关系非常复杂,用户静态编排任务时,需要提前梳理好所有任务及其关系,某些复杂场景中是无法做到以DAG方式静态编排任务。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种任务调度方法、装置、设备及存储介质,实现以动态DAG的生成和任务调度,简化了编排难度。
第一方面,本公开实施例提供一种任务调度方法,所述方法包括:
获取当前任务对应的阻塞任务,其中,所述当前任务的任务状态是新建状态或暂停状态;
确定当前任务对应的每个阻塞任务的任务状态;
在确定所有阻塞任务均为完成状态后,调度当前任务并执行当前任务逻辑。
第二方面,本公开实施例提供一种任务调度装置,所述装置包括:
阻塞任务确定模块,用于获取当前任务对应的阻塞任务,其中,所述当前任务的任务状态是新建状态或暂停状态;
任务状态确定模块,用于确定当前任务对应的每个阻塞任务的任务状态;
任务调度模块,用于在确定所有阻塞任务均为完成状态后,调度当前任务并执行当前任务逻辑。
第三方面,本公开实施例提供一种任务调度设备,包括:
存储器;
处理器;以及
计算机程序;
其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现如上述第一方面中所述的方法。
第四方面,本公开实施例提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如上述第一方面中所述的方法。
本公开实施例提供的任务调度方法、装置、设备及存储介质,通过确定新建任务或者暂停任务对应的每个阻塞任务的任务状态,然后在其对应的所有阻塞任务均为完成状态后,调度当前任务并执行当前任务逻辑,实现了所有阻塞任务均执行完成后触发执行当前任务,实现了DAG任务调度,简化了编排难度。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为一种任务间的依赖关系示意图;
图2为本公开实施例提供的一种任务调度方法的流程图;
图3是本公开实施例提供的一种任务发现流程图;
图4是本公开实施例提供的一种任务抢占流程图;
图5为本公开实施例提供的一种任务调度方法的流程图;
图6是本公开实施例提供的一种任务抢占流程图;
图7为本公开实施例提供的任务调度装置的结构示意图;
图8为本公开实施例提供的任务调度设备的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
在任务调度场景中,会由多个任务组成的一个工作流,以任务为节点,以先后顺序为边,最终这个工作流呈现为有向无环图(Directed Acyclic Graph,DAG)。
PowerJob支持以DAG方式静态编排任务。其中,以DAG方式编排任务,指的是为有依赖关系的任务设置阻塞关系,只有当阻塞任务执行完成后,才开始调度被阻塞任务,以保证任务之间的依赖关系,而没有依赖关系的任务可以并行调度,从而提升整体的调度效率。
任务A,B,C,D及依赖关系如表1所示,任务A被任务B和任务C阻塞,任务B被任务D阻塞,最终执行顺序如图1所示,任务B和任务C执行完成后,才能执行任务C,任务D执行完成后才能执行任务B;任务C可以和任务B并行执行,也可以和任务D并行执行。
表1
任务 | 依赖 |
A | B,C |
B | D |
C | |
D |
当明确知道所有任务及任务间的依赖关系时,可以静态编排各个任务间的阻塞关系,然后统一触发执行。然而,有些任务的依赖关系非常复杂,用户静态编排任务时,需要提前梳理好所有任务及其关系,某些复杂场景中是无法做到以DAG方式静态编排任务。
针对该问题,本公开实施例提供了一种任务调度方法,来动态探测任务的阻塞,并动态添加到阻塞任务列表中,以实现任务依赖项不明确场景下的任务调度,简化了编排难度。下面结合具体的实施例对该方法进行介绍。
图2为本公开实施例提供的一种任务调度方法的流程图;如图2所示,本公开实施例提供的任务调度方法主要包括如下步骤:
S101、获取当前任务对应的阻塞任务,其中,所述当前任务的任务状态是新建状态或暂停状态。
其中,任务是指需要执行的一段代码逻辑,比如部署一个Kubernetes应用,一个任务通常由任务执行器、任务参数等构成,其中任务执行器为代码逻辑,任务参数为其带入参数。任务执行器在以Java技术栈为背景的任务调度框架中,通常指的是注册为Spring Bean的一个Java类。
在本实施例中,当前任务可以通过遍历当前任务列表确定,其中当前任务列表中包括任务状态是新建状态和暂停状态的任务。具体的,查询是任务状态是新建状态或暂停状态的任务,并将任务状态是新建状态或暂停状态的任务标识添加至当前任务列表,遍历当前任务列表确定当前任务标识,基于当前任务标识确定当前任务。其中,当前任务的任务状态是新建状态或暂停状态。
进一步的,阻塞任务可以理解为当前任务所依赖,且未执行完成的任务。以图1为例,任务A依赖任务B和任务C,只有任务B和任务C执行完成,任务A才可以执行。如果任务B未执行完成,则任务B构成任务A的阻塞任务,同理,如果任务C未执行完成,则任务C构成任务A的阻塞任务。随着任务的调度执行,如果任务B执行完成,则任务B不再是任务A的阻塞任务,同理,如果任务C执行完成,则任务C不再是任务A的阻塞任务。
其中,当前任务对应的阻塞任务可以是一个也可以是多个,可以随着任务的不断执行进行变化,本实施例中不再限定阻塞任务的个数。
进一步的,查询当前任务对应的阻塞任务之前,该方法还包括:建立任务标识与阻塞任务之间的对应关系,并阻塞任务添加至该任务标识对应的阻塞任务列表中。
其中,每个任务设置对应的阻塞任务列表,当任务不存在阻塞任务时,该任务对应的阻塞任务列表为空。如表2所示,任务C和任务D不存在阻塞任务,因此,任务C和任务D对应的阻塞任务列表为空。任务A存在阻塞任务,即任务B和任务C,将任务B和任务C作为阻塞任务添加至任务A对应的阻塞任务列表中,任务B存在阻塞任务,即任务D,将任务D作为阻塞任务添加至任务B对应的阻塞任务列表中。
表2
具体的,查询当前任务对应的阻塞任务可以理解为遍历当前任务列表确定当前任务标识,基于当前任务标识进行查询,确定当前任务标识对应的阻塞任务列表,将该阻塞任务列表中的阻塞任务确定为当前任务对应的阻塞任务。
S102、确定当前任务对应的每个阻塞任务的任务状态。
需要说明的是,在实际的任务调度场景中,任务实际状态至少包括:执行成功,执行失败,运行中,暂停和新建。在本实施例中所述的任务状态包括完成状态或者未完成状态。完成状态包括执行成功和执行失败,即一个任务不论是执行成功还是执行失败,均称为完成状态。未完成状态包括运行中,暂停和新建,即一个任务不论是新建,暂停还是运行中,均称为未完成状态。
在一个可能的实施方式中,阻塞任务的任务状态可以根据任务的实际状态来决定。具体的,在阻塞任务的实际执行结果是失败或者成功时,确定该阻塞任务是完成状态;在阻塞任务的实际状态是运行中,暂停或者新建时,确定该阻塞任务是未完成状态。
在一个可能的实施方式中,在阻塞任务的上下文中以预设字段来表示阻塞任务的状态。其中,上述预设字段可以根据任务的实际状来进行修改。具体的,如果获取到预设字段为0,则确定该阻塞任务是执行未完成阶段,如果获取到预设字段为1,则确定该阻塞任务是执行完成阶段。需要说明的是,本实施例提供的预设字段的表示方式仅为示例性说明,本实施例中不对阻塞任务的任务状态进行具体的限定。
在本实施例中,可采用上述任意一种方式来确定各个阻塞任务的任务状态,本实施例中不再进行限定。
S103、在所有阻塞任务均为完成状态后,调度当前任务并执行当前任务逻辑。
其中,任务调度是指以定时、延时、手动触发、条件触发等任意一种或多种方式,执行一个任务。本实施例中,调度当前任务是指以条件触发的方式触发执行当前任务。当前任务的触发条件包括当前任务对应的所有阻塞任务均为完成状态。
在一个可能的实施方式中,在所有阻塞任务的上下文中的预设字段均为1时,确定当前任务对应的所有阻塞任务均为执行完成状态。具体的,获取预设字段为1的任务数量,如果预设字段为1的任务数量与阻塞任务数量一致,则确定当前任务对应的所有阻塞任务均为完成状态。
在一个可能的实施方式中,遍历当前任务对应的阻塞任务列表,如果某个阻塞任务的任务状态为执行完成状态,则将该阻塞任务从阻塞任务列表中删除,直到阻塞任务列表中不存在阻塞任务,则确定当前任务对应的所有阻塞任务均执行完成状态后,调度当前任务并执行当前任务逻辑。
在本实施例中,DAG方式编排任务是分布式调度,每个任务调度的进程都作为任务执行器,任务最终被一个任务执行器执行。其中,任务执行器在以Java技术栈为背景的任务调度框架中,通常指的是注册为Spring Bean的一个Java类。其中,执行当前任务逻辑包括为任务执行器(Java Bean)准备参数,并调用执行。
本公开实施例提供的任务调度方法包括:获取当前任务对应的阻塞任务,其中,当前任务的任务状态是新建状态或暂停状态;确定当前任务对应的每个阻塞任务的任务状态;在当前任务对应的所有阻塞任务均为完成状态后,调度当前任务并执行当前任务逻辑。本公开的技术方案通过确定新建任务或者暂停任务对应的每个阻塞任务的任务状态,然后在其对应的所有阻塞任务均为完成状态后,调度当前任务并执行当前任务逻辑,实现了所有阻塞任务均执行完成后触发执行当前任务,实现了DAG任务调度,简化了编排难度。
在一个实施方式中,确定当前任务对应的每个阻塞任务的任务状态,包括:判断当前阻塞任务的任务状态;在所述当前阻塞任务的任务状态是完成状态,判断是否存在下一个阻塞任务;如果存在下一个阻塞任务,则将下一个阻塞任务作为当前任务,返回执行判断当前阻塞任务的任务状态的步骤;如果不存在下一个阻塞任务,则所述确定当前任务对应的所有阻塞任务均为完成状态。
在本实施例中,所有阻塞任务均存储在阻塞任务列表中,针对阻塞任务列表每个阻塞任务,执行如下步骤:判断当前阻塞任务的任务状态,如果该阻塞任务的任务状态是未完成状态,则直接获取当前任务列表中的下一个任务作为当前任务,并返回执行查询当前任务对应的阻塞任务的步骤。如果该阻塞任务的任务状态是完成状态,则判断是否存在下一个阻塞任务,如果存在下一个阻塞任务,则将下一个阻塞任务作为当前阻塞任务,返回执行判断当前阻塞任务的任务状态的步骤;直到当前任务对应的阻塞列表中不存在阻塞任务,确定当前任务对应的所有阻塞任务均为完成状态,调度当前任务并执行当前任务逻辑。
图3是本公开实施例提供的一种任务发现流程图;如图3所示,本实施例提供的任务发现流程主要包括如下步骤:获取任务状态是新建状态和暂停状态的任务,添加至当前任务列表,遍历当前任务列表,基于当前任务标识查询当前任务对应的阻塞任务列表,遍历阻塞任务列表,判断当前阻塞任务的任务状态,如果当前阻塞任务的任务状态是执行未完成,则判断当前任务列表中是否存在下一个任务,如果存在下一个任务,则将下一个任务作为当前任务,并返回执行查询当前任务对应阻塞任务的步骤;如果不存在下一个任务,则此次任务发现流程结束。
如果当前阻塞任务的任务状态是完成状态,判断是否存在下一个阻塞任务,如果存在下一个阻塞任务,则将下一个阻塞任务作为当前阻塞任务,返回执行判断当前阻塞任务的任务状态的步骤。如果不存在下一个阻塞任务,则任务调度进程抢占当前任务;如果抢占成功,则将当前任务提交至线程池,判断是否存在下一个任务;如果存在下一个任务,则将下一个任务作为当前任务,并返回执行查询当前任务对应阻塞任务的步骤;如果不存在下一个任务,则此次任务发现流程结束。
如果抢占失败,则直接判断是否存在下一个任务;如果存在下一个任务,则将下一个任务作为当前任务,并返回执行查询当前任务对应阻塞任务的步骤;如果不存在下一个任务,则此次任务发现流程结束。
在一个实施方式中,所述调度当前任务并执行当前任务逻辑,包括:任务调度进程获取所述当前任务;如果获取成功,则将所述当前任务提交至线程池,执行当前业务逻辑;如果获取失败,或者,将所述当前任务提交至线程池后;判断是否存在下一个任务;如果存在下一个任务,则将下一个任务作为当前任务,并返回执行查询当前任务对应阻塞任务的步骤。
其中,以DAG方式编排任务没有依赖关系的任务可以并行调度,由于分布式并行调度,每个任务调度的进程都作为任务执行器,任务最终被一个任务执行器执行,因此需要任务执行器即任务调度进程抢占任务。
在一个可能的实施方式中,任务调度进行抢占当前任务,如果抢占成功,则将当前任务提交至线程池,由抢占成功的任务执行器执行当前业务逻辑,如果抢占失败,则表明系统中的其他任务执行器抢占成功,然后直接判断当前任务列表中是否存在下一个任务;如果存在下一个任务,则将下一个任务作为当前任务,并返回执行查询当前任务对应的阻塞任务的步骤。
在一个可能的实施方式中,任务调度进行抢占当前任务,如果抢占成功,则将当前任务提交至线程池,由抢占成功的任务执行器执行当前业务逻辑,将当前任务提交至线程池后,判断当前任务列表中是否存在下一个任务;如果存在下一个任务,则将下一个任务作为当前任务,并返回执行查询当前任务对应的阻塞任务的步骤。
优选的,需要通过数据库锁进行任务抢占。
图4是本公开实施例提供的一种任务抢占流程图;如图4所示,本实施例提供的任务抢占流程主要包括如下步骤:根据当前任务标识查询数据库锁实体,根据当前任务标识查询阻塞任务列表;判断阻塞任务列表中是否存在执行未完成的任务,如果阻塞任务列表中存在执行未完成的任务,则放弃抢占,此次抢占结束。如果阻塞任务列表中不存在执行未完成的任务,则开启事务,将当前任务的状态更新为执行中;然后更新数据库锁,并判断更新结果;如果数据库锁更新成功,则提交事务,此次抢占结束;如果数据库锁更新失败,则回滚事务,此次抢占结束。
在一个实施例中,图5为本公开实施例提供的另一种任务调度方法的流程图;如图5所示,本公开实施例提供的另一种任务调度方法主要包括如下步骤:
S201、获取当前任务对应的阻塞任务。
S202、确定所述当前任务对应的每个阻塞任务的任务状态。
S203、在所述当前任务对应的所有阻塞任务均为完成状态后,调度所述当前任务并执行当前任务逻辑。
S201-S203的实现过程和具体原理与上述S101-S103实现过程和具体原理相似,具体可参照上述描述,此处不再赘述。
S204、判断所述当前任务的执行结果。
其中,当前任务的执行结果可以是暂停,成功或者失败中的任意一种。
S205、如果所述当前任务的执行结果是暂停,则将所述当前任务的状态设置为暂停状态,同时获取所述当前任务对应的未完成任务。
其中,如果所述当前任务的执行结果是暂停(PAUSE),则表明当前任务存在具有依赖关系的任务没有执行完成。此时将当前任务设置为暂停状态,同时从执行结果中获取当前任务对应的未完成任务。
S206、将所述未完成任务确定为当前任务对应的阻塞任务。
在本实施例中,根据当前任务的任务状态将本实施例提供的任务调度方法划分为2个阶段。
阶段0:根据当前任务执行结果,确定需要添加到当前任务对应的任务阻塞列表中的任务,并将当前任务设置为暂停状态,退出执行队列。
阶段1:当前任务对应的任务阻塞列表中的任务全部执行完成后,重新调度该暂停状态的任务,任务执行阶段0所对应的方法,执行业务逻辑。
其中,当前任务可多次暂停。如果业务有需求,阶段1也可以返回任务阻塞列表,任务将继续暂停,当阻塞任务执行完成后,会重新调度当前任务,以此类推。
在一个可能的实施方式中,将所述当前任务的状态设置为暂停状态的同时,还包括:将所述当前任务的预设参数标记为第一状态,并作为所述当前任务的上下文进行存储。相应的,调度当前任务之前,还包括:将所述当前任务的预设参数标记为第二状态。
在本实施例中,任务阶段以stage为名存储在任务上下文中,在调用之前,stage进行加1,从而调度任务的下一个执行方法。
在一个可能的实施例中,提供一种任务执行流程图,如图6所示,任务执行流程主要包括如下步骤:加载当前任务内容至MAP,加载当前任务上下文至MAP,查询任务执行器,判断是否存在任务执行器,如果不存在任务执行器,则执行结果失败,存储执行结果,存储执行日志和上下文,此次任务执行结束。如果存在任务执行器,则调用上述任务执行器,将上述任务内容和任务上下文传入上述任务执行器,任务执行器返回执行结果。判断执行结果,如果执行结果是成功或失败,则直接存储执行结果,存储执行日志和上下文,此次任务执行结束。如果执行结果是暂停,则获取当前任务对应的未完成任务添加至阻塞任务列表中,然后存储执行结果,存储执行日志和上下文,此次任务执行结束。
其中,任务内容即任务参数,任务上下文即任务执行的中间过程值,均以JSON格式存储,加载到MAP中供任务执行器使用。任务执行器返回结果为PAUSE(暂停)时,获取同时返回的阻塞任务,添加到当前任务的阻塞任务列表中,任务本次调度执行完成。
本公开实施例提供的任务调度方法包括:查询当前任务对应的阻塞任务,确定当前任务对应的每个阻塞任务的任务状态;在当前任务对应的所有阻塞任务均执行完成状态后,调度当前任务并执行当前任务逻辑,如果当前任务的执行结果是暂停,则将当前任务的状态设置为暂停状态,同时获取所述当前任务对应的未完成任务,将所述未完成任务确定为当前任务对应的阻塞任务。本公开的技术方案将DAG任务的编排抽象为两个动作发现依赖,触发执行,用户只需要实现相应的方法返回参数,即可实现DAG任务调度,简化了编排难度,也使得该过程变得可动态。
图7为本公开实施例提供的任务调度装置的结构示意图。本公开实施例提供的任务调度装置可以执行上述任务调度方法实施例提供的处理流程,如图7所示,本公开实施例提供的任务调度装置70包括:阻塞任务确定模块701,任务状态确定模块702和任务调度模块703。
其中,阻塞任务确定模块701,用于获取当前任务对应的阻塞任务,其中,所述当前任务的任务状态是新建状态或暂停状态;
任务状态确定模块702,用于确定当前任务对应的每个阻塞任务的任务状态;
任务调度模块703,用于在所有阻塞任务均为完成状态后,调度当前任务并执行当前任务逻辑。
本公开实施例提供的任务调度装置用于执行如下流程:获取当前任务对应的阻塞任务,其中,当前任务的任务状态是新建状态或暂停状态;确定当前任务对应的每个阻塞任务的任务状态;在所有阻塞任务均为完成状态后,调度当前任务并执行当前任务逻辑。本公开的技术方案通过确定新建任务或者暂停任务对应的每个阻塞任务的任务状态,然后在其对应的所有阻塞任务均为完成状态后,调度当前任务并执行当前任务逻辑,实现了所有阻塞任务均执行完成后触发执行当前任务,实现了DAG任务调度,简化了编排难度。
进一步的,所述装置70还包括:
执行结果判断模块,用于判断所述当前任务的执行结果;
未完成任务获取模块,用于如果所述当前任务的执行结果是暂停,则将所述当前任务的状态设置为暂停状态,同时获取所述当前任务对应的未完成任务;
未完成任务添加模块,用于将所述当前任务对应的未完成任务添加至所述阻塞任务列表中。
进一步的,未完成任务获取模块,在将所述当前任务的状态设置为暂停状态的同时,还用于将所述当前任务的预设参数标记为第一状态,并作为所述当前任务的上下文进行存储;
相应的,任务调度模块,用于在调度所述当前任务之前,还用于将所述当前任务的预设参数标记为第二状态。
进一步的,任务状态确定模块702,包括:
阻塞任务状态判断单元,用于判断当前阻塞任务的任务状态;
阻塞任务存在判断单元,用于在所述当前阻塞任务的任务状态是完成状态时,判断是否存在下一个阻塞任务;如果存在下一个阻塞任务,则将下一个阻塞任务作为当前阻塞任务,返回执行判断当前阻塞任务的任务状态的步骤;如果不存在下一个阻塞任务,则确定所述当前任务对应的所有阻塞任务均为完成状态。
进一步的,任务调度模块703,包括:
任务抢占单元,用于任务调度进程获取所述当前任务;
业务执行单元,用于如果获取成功,则将所述当前任务提交至线程池,执行当前业务逻辑;
下一个任务判断单元,用于如果获取失败,或者,将所述当前任务提交至线程池后;判断是否存在下一个任务;如果存在下一个任务,则将下一个任务作为当前任务,并返回执行查询当前任务对应的阻塞任务的步骤。
图7所示实施例的任务调度装置可用于执行上述任务调度方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。
图8为本公开实施例提供的任务调度设备的结构示意图。该任务调度设备具体可以是如上所述的客户端,或者是该客户端中的部件。本公开实施例提供的任务调度设备可以执行上述任务调度方法实施例提供的处理流程。
如图8所示,任务调度设备80包括:存储器81、处理器82、计算机程序和通讯接口83;其中,计算机程序存储在存储器81中,并被配置为由处理器82执行如上所述的任务调度方法。
另外,本公开实施例还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行以实现上述实施例所述的任务调度方法。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种任务调度方法,其特征在于,所述方法包括:
获取当前任务对应的阻塞任务,其中,所述当前任务的任务状态是新建状态或暂停状态;
确定所述当前任务对应的每个阻塞任务的任务状态;
在确定所有阻塞任务均为完成状态后,调度所述当前任务并执行当前任务逻辑。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
判断所述当前任务的执行结果;
如果所述当前任务的执行结果是暂停,则将所述当前任务的状态设置为暂停状态,同时获取所述当前任务对应的未完成任务;
将所述未完成任务确定为当前任务对应的阻塞任务。
3.根据权利要求1所述的方法,其特征在于,将所述当前任务的状态设置为暂停状态的同时,还包括:
将所述当前任务的预设参数标记为第一状态,并作为所述当前任务的上下文进行存储;
调度所述当前任务之前,还包括:
将所述当前任务的预设参数标记为第二状态。
4.根据权利要求1所述的方法,其特征在于,确定当前任务对应的每个阻塞任务的任务状态,包括:
判断当前阻塞任务的任务状态;
在所述当前阻塞任务的任务状态是完成状态,判断是否存在下一个阻塞任务;
如果存在下一个阻塞任务,则将下一个阻塞任务作为当前阻塞任务,返回执行判断当前阻塞任务的任务状态的步骤;
如果不存在下一个阻塞任务,则确定所述当前任务对应的所有阻塞任务均为完成状态。
5.根据权利要求1所述的方法,其特征在于,所述调度当前任务并执行当前任务逻辑,包括:
任务调度进程获取所述当前任务;
如果获取成功,则将所述当前任务提交至线程池,执行当前业务逻辑;
如果获取失败,或者,将所述当前任务提交至线程池后;
判断是否存在下一个任务;
如果存在下一个任务,则将下一个任务作为当前任务,并返回执行查询当前任务对应的阻塞任务的步骤。
6.一种任务调度装置,其特征在于,所述装置包括:
阻塞任务查询模块,用于获取当前任务对应的阻塞任务,其中,所述当前任务的任务状态是新建状态或暂停状态;
任务状态确定模块,用于确定当前任务对应的每个阻塞任务的任务状态;
任务调度模块,用于在确定所有阻塞任务均为完成状态后,调度当前任务并执行当前任务逻辑。
7.根据权利要求6所述的装置,其特征在于,所述装置还包括:
执行结果判断模块,用于判断所述当前任务的执行结果;
未完成任务获取模块,用于如果所述当前任务的执行结果是暂停,则将所述当前任务的状态设置为暂停状态,同时获取所述当前任务对应的未完成任务;
未完成任务添加模块,用于将所述当前任务对应的未完成任务添加至所述阻塞任务列表中。
8.根据权利要求6所述的装置,其特征在于,任务状态确定模块,包括:
阻塞任务状态判断单元,用于判断当前阻塞任务的任务状态;
阻塞任务存在判断单元,用于在所述当前阻塞任务的任务状态是完成时,判断是否存在下一个阻塞任务;如果存在下一个阻塞任务,则将下一个阻塞任务作为当前任务,返回执行判断当前阻塞任务的任务状态的步骤;如果不存在下一个阻塞任务,则所述当前任务对应的所有阻塞任务均执行完成。
9.一种任务调度设备,其特征在于,包括:
存储器;
处理器;以及
计算机程序;
其中,所述计算机程序存储在所述存储器中,并被配置为由所述处理器执行以实现如权利要求1-5中任一所述的方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-5中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210002802.0A CN114168305A (zh) | 2022-01-04 | 2022-01-04 | 一种任务调度方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210002802.0A CN114168305A (zh) | 2022-01-04 | 2022-01-04 | 一种任务调度方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114168305A true CN114168305A (zh) | 2022-03-11 |
Family
ID=80489038
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210002802.0A Pending CN114168305A (zh) | 2022-01-04 | 2022-01-04 | 一种任务调度方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114168305A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115658242A (zh) * | 2022-10-21 | 2023-01-31 | 芯华章科技股份有限公司 | 逻辑系统设计的任务处理方法及电子设备 |
CN115858175A (zh) * | 2023-01-29 | 2023-03-28 | 北京卡普拉科技有限公司 | 异步i/o请求优先级的调度方法、装置、介质及控制设备 |
CN116414464A (zh) * | 2023-05-26 | 2023-07-11 | 摩尔线程智能科技(北京)有限责任公司 | 调度任务的方法和装置、电子设备和计算机可读介质 |
-
2022
- 2022-01-04 CN CN202210002802.0A patent/CN114168305A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115658242A (zh) * | 2022-10-21 | 2023-01-31 | 芯华章科技股份有限公司 | 逻辑系统设计的任务处理方法及电子设备 |
CN115658242B (zh) * | 2022-10-21 | 2024-04-26 | 芯华章科技股份有限公司 | 逻辑系统设计的任务处理方法及电子设备 |
CN115858175A (zh) * | 2023-01-29 | 2023-03-28 | 北京卡普拉科技有限公司 | 异步i/o请求优先级的调度方法、装置、介质及控制设备 |
CN116414464A (zh) * | 2023-05-26 | 2023-07-11 | 摩尔线程智能科技(北京)有限责任公司 | 调度任务的方法和装置、电子设备和计算机可读介质 |
CN116414464B (zh) * | 2023-05-26 | 2023-09-22 | 摩尔线程智能科技(北京)有限责任公司 | 调度任务的方法和装置、电子设备和计算机可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114168305A (zh) | 一种任务调度方法、装置、设备及存储介质 | |
CN106874084B (zh) | 一种分布式工作流调度的方法、装置及计算机设备 | |
CN111309372A (zh) | 定时任务执行方法、装置、计算机设备和存储介质 | |
US9218210B2 (en) | Distributed processing system | |
CN111061551A (zh) | 节点的合并调度方法、装置、设备及存储介质 | |
CN113282402A (zh) | 一种面向复杂资源约束的测试任务调度方法 | |
US8458136B2 (en) | Scheduling highly parallel jobs having global interdependencies | |
CN107784400B (zh) | 一种业务模型的执行方法和装置 | |
CN110516000B (zh) | 一种支持复杂工作流结构的工作流管理系统 | |
CN112199180A (zh) | 多任务调度的方法及装置、电子设备及可读存储介质 | |
CN114064439B (zh) | 微服务工作流运行时长预测方法、装置、设备以及介质 | |
CN111831424A (zh) | 一种任务处理方法、系统及装置 | |
CN113434283A (zh) | 服务调度方法及装置、服务器、计算机可读存储介质 | |
CN111147541B (zh) | 基于参数服务器的节点处理方法、装置、设备及存储介质 | |
CN115827235A (zh) | 分布式系统的控制方法和存储介质 | |
CN112150035B (zh) | 数据处理方法和装置 | |
CN113225269B (zh) | 基于容器的工作流调度方法、装置、系统及存储介质 | |
CN112817744A (zh) | 一种任务处理方法及装置 | |
CN114327673A (zh) | 一种任务启动方法、装置、电子设备及存储介质 | |
CN115220887A (zh) | 调度信息的处理方法、任务处理系统、处理器和电子设备 | |
CN110046809B (zh) | 作业调度方法及装置 | |
CN112783613B (zh) | 一种单元调度的方法和装置 | |
CN112363819A (zh) | 大数据任务动态编排调度方法、装置及计算设备 | |
EP1011045B1 (en) | Object-oriented job scheduler | |
CN112559148A (zh) | 有序任务的执行方法、执行装置和执行系统 |
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 |