知识卡片

分叉与结合:并行流的开启与同步

结构图卡 · 1950.a

内容

分叉(fork)有一个进入流和若干离开的并发流,标志着从此处开始的若干动作之间没有先后顺序约束——它们之间可以任意交错、也可以真正同时发生,活动图只表达本质上不得不遵从的先后顺序,其余全部留给执行者自由选择次序,这对建模天然并行的业务流程和并发算法都很有用。结合(join)是分叉的镜像操作:只有当所有进入流都到达结合时,离开流才会执行,用来表达”必须等所有并行分支都完成才能继续”的同步点。UML 1中活动图是状态图特例,要求分叉和结合必须成对平衡;UML 2解除了这个限制。

结构图:

flowchart TD
    A[Receive Order 接收订单] --> B{fork 分叉}
    B --> C[Fill Order 填写订单]
    B --> D[Send Invoice 发送发票]
    C --> E{join 结合}
    D --> E
    E --> F[Close Order 关闭订单]

参考来源

- 位置:《UML精粹:标准对象建模语言简明指南(第3版)》第11章《活动图》(源文件:_epub-src/EPUB/10.xhtml) - 结论依据:原文定义"分叉(fork)有一个进入流和若干离开的并发流……活动图只是说明本质的不得不遵从的先后顺序规则",并说明"我们在Close Order动作前加上结合展示这一点。使用结合时,只有当所有进入流到达结合时,离开流才会执行"。 - 原始内容:分叉(fork)有一个进入流和若干离开的并发流……当你碰到并行的情况时,你需要同步……我们在Close Order(关闭订单)动作前加上结合(join)展示这一点。使用结合时,只有当所有进入流到达结合时,离开流才会执行。