活动图中的Join和Merge

16

在统一建模语言活动图中,Join和Merge有什么区别?请举一个例子更好地理解。

2个回答

22

连接节点(见参考1):

连接节点是一个控制节点,具有多个输入边和一个输出边,并用于同步输入并发流。连接节点被引入以支持活动中的并行性

合并节点(见参考2):

合并节点是一个控制节点,将多个备选流程汇集成单个输出流程。没有令牌的合并。不应使用合并来同步并发流程


例如在下面的图表中:

在分叉之后使用一个决策,这两个流程需要在进入连接之前合并为一个流程

为什么?:否则,连接将等待两个流程。

所以Activity 2Activity 3 是我们的备选流程,只有其中之一会到达。它们不是同步进入的。

然而Concurrent_ActivityActivity 1Activity 2之间的决策结果(合并为一个输出)是同步进入的并发流程。连接等待两个流程执行并继续。

enter image description here


1
即使规范中的所有示例都像@Gholamali-Irani所解释的那样,您仍然可以在分支之后使用合并节点,它不仅用于合并备选流。该规范解释道:“MergeNode是一个控制节点,它将多个流组合在一起而不进行同步。” - granier
合并操作可以有超过3个输入流吗? - Nuwan Karunarathna
5
JOIN 要求所有进入的活动都必须完成才能继续执行。而MERGE只等待其中一个进入的活动完成即可。JOIN 会阻塞,而 MERGE 不会。 - Michael Ziluck

4
为了详细说明 @Gholamali-Irani 的回答:活动图是从 Petri 网络派生而来的。简单来说,您必须想象一个单一的“令牌”,它从一个起始点(那个粗点)开始。令牌沿着路径行进,直到在其中一个(圆点)终端消失(或者如 UML 所允许的那样,在没有出口路径的操作中)。分叉节点将把单个令牌乘以其所有出口路径的令牌数(UML 对于具有多个出口路径且未受保护的操作也具有隐式分叉)。因此,这些多个令牌独立地行进,直到它们像上面描述的那样消失,或者它们到达具有多个入口路径的合并点(或操作)。在这里,令牌等待,直到所有路径都使用单个令牌。然后将这些多个令牌合并为一个继续前进的令牌。
通过这个规则集,您可以模拟任何复杂的并发网络。

非常感谢 Patri net 的提示。它是数学建模语言。我可以在研究论文中使用它将我的活动图映射到数学世界中。 - Gholamali Irani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接