【发布时间】:2021-05-28 07:06:23
【问题描述】:
我正在尝试对拆分为 2 个并行线程的进程进行建模,其中线程 1 通过里程碑独立进行,而线程 2 需要考虑其自身的进度 + 线程 1 的状态才能通过里程碑。最后,两个线程都需要完成。我该如何建模? (下面是我最好的尝试)
【问题讨论】:
标签: parallel-processing synchronization state modeling bpmn
我正在尝试对拆分为 2 个并行线程的进程进行建模,其中线程 1 通过里程碑独立进行,而线程 2 需要考虑其自身的进度 + 线程 1 的状态才能通过里程碑。最后,两个线程都需要完成。我该如何建模? (下面是我最好的尝试)
【问题讨论】:
标签: parallel-processing synchronization state modeling bpmn
您建模的内容会起作用。但是,您不需要中间事件。您可以直接连接到任务。而且您不需要包容性网关。它会起作用,但并行网关会做同样的事情并且不那么复杂。
【讨论】:
将传入事件与下分支上的正常流合并的方式存在问题。使用的符号不明确,不保证符合执行语义。
该图可能会如您所愿地被理解。但由于缺少同步,从 BPMN 执行语义的角度来看是不正确的。
让我们根据执行语义(规范第13章),用token的概念来分析流程:
一个进程在其启动事件之一发生时被实例化。
发生的每个开始事件都会在其传出的序列流上创建一个标记
要使流程实例完成,该实例中的所有令牌都必须到达结束节点,即没有传出序列流的节点
因此,在您的流程开始时,会创建一个令牌,并将其传递给第一个任务。然后你就有了一个 fork 的并行网关:
并行网关从每个传入序列流中仅使用一个令牌,并在每个传出序列流中仅生成一个令牌。
然后你有 2 个令牌,它们将流向第一个上层和第一个下层任务。上层令牌将继续到“无”中间事件。较低的令牌将到达“合并门”的入口。问题是我们是否保证在每个并行分支上保留一个令牌。
“无”中间门将抛出令牌并将其传递到传出流中。因此生成了 2 个令牌:一个到下一个上层任务,一个到“合并门”。
我通俗地称为“合并门”实际上在您的图表中是模棱两可的:
最后两个选项是唯一保证在上分支和下分支上保留一个且恰好一个令牌的选项。然后,流程的其余部分将变得微不足道,直到结束。
【讨论】: