fork/join 节点与 Activity 图中其他节点的令牌行为之间的差异

Difference between behavior of fork/join nodes toward tokens with other nodes of Activity diagrams

Thomas Kilian described 一样,Activity 图表节点的正常行为是:

A node becomes active when at all of its incoming InformationFlow connectors a token has arrived. When the node finalizes it sends single tokens along all its outgoing InformationFlow connectors.

但他还补充说:

There are special nodes like fork and merge which behave a bit different

我知道 "merge" 节点的行为不同,因为它通过接收第一个令牌立即激活并接受几个备用流中的一个。但是 fork/join 节点的行为与具有正常行为的令牌有什么区别?

Merge- 和 DecisionNode 看起来一样,但是是不同的元素:.

在图表中,您只能通过查看传入和传出 InformationFlow 来区分两者。第一个有多个传入和一个传出,而第二个具有相反的关系。 MergeNode 接受任何传入令牌并将其直接转发到其单个传出 InformationFlow。所以不像 Actions 它不会等待所有令牌。相比之下,DecisionNode 只接受一个标记,并让它只传递给它的一个传出 InformationFlow。建模者有责任以一种只有一个评估为真的方式设置守卫。如果有更多(甚至无人看守)InformationFlow,令牌将采用任意自由路线。

ForkJoin 也是两个看起来相同的不同元素:(或垂直)。

也可以通过in-/outgoingInformationFlow的个数来区分。 Fork 一进多出,Join 反之亦然。一旦令牌到达其单个传入 InformationFlowFork 将发送与传出 InformationFlow 一样多的令牌。 Join 将(如 Actions)等待令牌到达其所有传入的 InformationFlows。只有这样,它才会在其单个传出 InformationFlow 处出现一个标记。

所以虽然Merge-和DecisionNodes控制单个令牌(执行路径)的流程ForkJoin用于启动和同步并行执行路径。