知识卡片

任务类型与网关:排他网关和并行网关的"并行"不等于多线程并行

普通读书笔记卡

内容

任务是BPMN流程的基本元素,是一个原子工作单元——[[BPMN的token机制流程实例即在模型中流动的token]]所属的token到达任务位置就会停下,直到任务完成才沿顺序流流出,任务粒度全凭建模者取舍(比如”处理订单”可以是一个任务,也可以拆成支付确认、提取货物、发出货物三个任务)。BPMN定义了多种任务类型来细化”工作单元”:服务任务(token经过时执行软件功能,通常是调用其他服务/方法/函数,可以用惯用编程语言写胶水代码连接)、人工任务(生成任务列表待办项,工作流引擎等待人工勾选完成)、业务规则任务(用决策引擎计算规则表)、脚本任务(用引擎定义的脚本语言在引擎内执行)。网关负责路由token,比顺序流更复杂:排他网关(exclusive gateway)基于数据从多条顺序流里精确选一条(比如只有选了预付款才会进入”支付确认”任务);并行网关则会为激活的多条顺序流各自生成新token(比如可以在支付成功前决定是否购买)。需要特别注意的是,BPMN里的”并行”不是多线程语境下的并行——它不意味着任务真的同时执行,而是描述一种和”等待”相关的关系:某条路径在等待时,你可以在另一条路径上继续做点别的事,这才是BPMN”并行”的真正含义。

参考来源

- 位置:《流程自动化实战:系统架构和软件开发视角》第3章《开发流程解决方案》"3.1.4 任务:工作单元""3.1.5 网关:流程方向盘"(源文件:_epub-src/EPUB/xhtml/Section0001_0006.xhtml) - 结论依据:原文定义任务是原子工作单元并列举服务任务/人工任务/业务规则任务/脚本任务四种类型,区分排他网关(选一条路径)与并行网关(生成多个token),并明确指出"并行"不是多线程意义上的同时运行,而是等待关系上的并行,直接支撑本卡片结论。 - 原始内容:任务是一个原子的工作单元……服务任务是很重要的一种类型。当token经过服务任务时,将会执行一些软件功能……排他网关(exclusive gateway)会基于数据从多个顺序流中选择其中一个……需要重点说明的是,这并不一定意味着任务在同时运行,它不是多线程中讨论的并行。