任务调度系统-任务依赖的设计

任务调度工作中经常用到,感觉这个博客逻辑挺不错。

博客来源 https://www.cnblogs.com/tangyanbo/p/6425331.html

 

1.     任务依赖需求描述

例子:

一个作业分为如下子任务:

任务1,任务2,任务3,任务4

执行的顺序为,任务1---》任务2,任务3---》任务4

其中任务2,任务3可以并行执行,我们用下图描述:

                                                   

这是一个图形结构,我们预设,任务的起始点永远都是一个根节点,不管你业务如何,遵从这个设计是没有难度的,以后的流程,可以并行,也可以串行,任何一个阶段,都能支持并行和串行,因此,我们的子任务关系构成的数据结构为一个图。

 

2. 任务调度简单流程

 

  1. 首先定义一个job代表一次业务的调度,job维护了任务1到任务4之间的关系。
  2. 找到job的根节点任务1,先执行任务1,因为是根节点,没有父类,因此没有先决条件,任务被调度时,即可执行。
  3. 执行完根节点之后,看该节点是否有子节点,没有则不继续,有则并行执行所有子节点的任务。
  4. 此时任务2和任务3会被并行调用,我们假设调用指令先到任务2,任务2发现有1个父节点,且调用指令中表示父节点已经执行完成,那么就开始执行任务2的调度,同理任务3也是同样的逻辑。
  5. 任务2和任务3执行完成之后,会先后或者同时调用任务4,我们这里为了避免同时并发造成的困扰,任务被调用这个方法要设置成同步,那么假设任务2先调用任务4,此时我们在内存中记录任务2已完成,并且任务4发现自己的2个父节点中,任务3的指令并没有来到,因此,此次调度跳过,等待任务3指令的到来。
  6. 当任务3的指令到来,我们根据jobid,找到之前暂停的job,此时发现任务2,3都执行完成,那么开始执行任务4,本次业务调度完成。
posted @ 2020-10-14 10:03  塔塔尔兀格  阅读(369)  评论(0)    收藏  举报