知识卡片
分叉与结合:并行流的开启与同步
内容
分叉(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)展示这一点。使用结合时,只有当所有进入流到达结合时,离开流才会执行。