搜索

66.4. 进程引擎中的线程

download PDF

我们可引用两种类型的多线程: 逻辑 和技术技术多线程 涉及多个线程或启动的进程,例如通过 Java 或 C 程序。在 BPM 过程中发生 逻辑多线程,例如,在进程到达并行网关后。在执行逻辑中,原始进程被分成两个以并行方式运行的进程。

流程引擎代码使用一个技术线程实施逻辑多线程。

这种设计选择的原因是,多个(技术)线程必须能够在同一进程上相互交流状态信息。这个要求会产生一些复杂情况。在线程间安全通信需要额外的逻辑,以及避免竞争条件和死锁所需的额外开销,可以降低使用这些线程的性能优势。

通常,进程引擎执行一系列操作。例如,当进程引擎在进程中遇到脚本任务时,它会同步执行脚本并等待其完成,然后再继续执行。同样,如果进程遇到并行网关,进程引擎按顺序触发每个传出分支,另一个是这样。

这是因为执行几乎总是瞬间,这意味着它非常快,生成几乎没有开销。因此,顺序执行不会产生用户可能会发现的任何影响。

您提供的过程中的任何代码也执行同步,进程引擎在继续操作前等待其完成。例如,如果您使用 Thread.sleep(…​) 作为自定义脚本的一部分,则进程引擎线程在休眠期间被阻断。

当进程到达服务任务时,进程引擎还会异步调用处理程序,并等待 completeWorkItem(…​) 方法返回,然后再继续执行。如果您的服务处理程序不瞬间,请在您的代码中单独实施异步执行。

例如,您的服务任务可能会调用外部服务。远程调用此服务和等待结果的延迟可能非常显著。因此,异步调用此服务。您的处理程序必须仅调用该服务,然后从方法返回,然后在结果可用时通知进程引擎。同时,流程引擎可以继续执行进程。

人工任务是需要异步调用的服务的典型示例。人工任务需要人工响应请求,流程引擎不得等待这一响应。

触发人工任务节点时,人工任务处理程序仅在所分配人的任务列表上创建一个新任务。然后,流程引擎可以继续在剩余的流程中继续执行(如有必要)。当用户完成任务时,处理程序会异步通知流程引擎。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.