并行网关

1、并行网关

假设现在我们想在旁边放一份沙拉。无论如何,如果你想要沙拉,你可以像我们在图1.1中所做的那样建模。

图1.1:准备沙拉和主菜。

在这里,我们介绍了另一个符号:(文本)注释;这是一个您可以与任何流对象(在本例中是任务)关联的工件。你可以输入任何文本;在我们的示例中,我们输入了执行相关任务的平均时间。任务时间的总和等于流程的运行时间,意大利面的运行时间为48分钟,牛排的运行时间为43分钟。祝贺您:您已经基于关键数据分析了您的第一个流程!

不过,这意味着要等23分钟甚至28分钟才能开始吃东西。难以忍受的!你真的很饿,但你能做什么?也许你不会先准备沙拉,然后再做意大利面或牛排,但你会同时做这两件事——同时做。适当的符号是并行网关,或简称和网关,如图1.2所示。

图1.2:同时准备沙拉和主菜。

将任务画成并行并不意味着必须同时处理。与图1.1所示的示例相反,在开始其他任务之前也不是必须准备沙拉。然而,并行准备确实使我们的总时间减少了10分钟。使任务尽可能并行化是经典的流程优化。

如示例所示,该进程不仅是并行的(它使用了and split),而且路径稍后还会同步(an and merge)。原因很容易理解:你只能在主菜和配菜都准备好之后才能开始吃。

令牌的概念如何应用于此流程的实例?令牌在开始事件时产生,它运行choose recipe任务,然后插入and split。每个路径都从网关中出现一个令牌。这意味着在本例中有两个令牌:第一个令牌进入xor分割,其传出路径取决于所选的菜谱。

假设我们想做意大利面。令牌进入任务并停留15分钟。同时,第二个令牌进入第二个,准备沙拉任务,它只停留10分钟。10分钟后,它移到合并处。传入路径的数量决定了网关正在等待的相关令牌的数量,因此在这里,它等待相同流程实例的两个令牌。

在我们的场景中,第二个令牌在10分钟后到达and merge,而第一个令牌在cook pasta中总共停留了15分钟。这意味着and合并将等待到第一个令牌到达—额外的5分钟。此时,令牌愉快地合并为单个令牌,该令牌将继续沿着传出路径运行。

这听起来是不是太抽象或太专业了?它不是,这和你自己的做法是一样的:沙拉准备好了,但意大利面还没有,所以你等着。当意大利面最终做好时,你就可以吃了。

那么,为什么使用这个看似复杂的符号概念呢?例如,每年信用机构创建9000万个流程实例,这些并不是按照严格的顺序执行的,他们有重叠,为了每天正确地定义和执行这种复杂的流程及其各种并行操作、分支、合并和同步,令牌方法就对对概念设计和实现是非常有帮助,而且非常必要。我们希望到目前为止,流程实例与令牌并不完全相同:许多令牌可以在单个流程实例的范围内运行。

用下面的问题检查你的理解:

问题:图1.3显示了相同的过程,但是由于缺少空间,省略了and merge,并且从prepare沙拉任务的路径直接通向xor合并。如果我们实例化这个过程,并决定支持意大利面,会发生什么?

图1.3:在这个过程中发生了什么?

答:在and分割时生成令牌,然后像往常一样进行克隆。当我们完成准备沙拉,令牌通过xor合并和吃饭执行,五分钟后,意大利面也做好了,它的令牌通过xor合并,并再次执行!这不是我们想要的行为。

问题:图1.4显示了一个只包含两个任务的流程。实例化后,流程实例存活多久?

图1.4:流程实例存在多长时间?

答:它存在45天,这与进程的运行时间相对应。即使在and split中生成的令牌在30天后通过task 1,然后被上端事件使用,第二个令牌仍然在task 2中驻留15天,流程实例继续存在,直到低端事件使用第二个令牌为止。

注意:只要流程中有一个令牌存在,流程实例就存在!在使用所有生成的令牌之前,该实例无法完成。

 


本文会持续更新,欢迎关注,技术支持:盘古BPM 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章