🥦异步循环模式
LiteFlow从2.11.0版本起,支持了循环表达式的异步模式,使得各个循环表达式的循环子项可以异步执行。
# 使用方法
对于LiteFlow中的次数循环表达式、条件循环表达式以及迭代循环表达式等循环表达式,可以使用parallel
子关键字(默认为false)来配置循环子项的执行方式,使其成为异步模式的循环表达式(所谓异步模式,就是各个循环子项之间并行执行)。
如果parallel
子关键字设置为true
,表示各循环子项之间并行执行,否则各循环子项之间串行执行。
# 例子
对于次数循环表达式,可以这样配置,使其各个循环子项并行执行:
<chain name="chain1">
FOR(2).parallel(true).DO(THEN(a,b,c));
</chain>
如果使用上述配置,每个循环子项本身的执行方式保持不变,只是各个循环子项之间的执行方式变为并行执行,也就是chain1会并行执行两次THEN(a,b,c)。
对于条件循环表达式,可以这样配置,使其各个循环子项并行执行:
<chain name="chain6">
WHILE(x).parallel(true).DO(THEN(a,b,c));
</chain>
对于迭代循环表达式,可以这样配置,使其各个循环子项并行执行:
<chain name="chain7">
ITERATOR(x).parallel(true).DO(THEN(a,b,c));
</chain>
# 使用说明
parallel
子关键字只能用于次数循环表达式、条件循环表达式以及迭代循环表达式等循环表达式。- 对于异步模式的条件循环表达式,会不断创建并行执行循环子项,直到条件不满足为止。
- 异步模式依然支持BREAK,当退出循环组件返回为true时,会停止向线程池提交新的任务,但是已经提交的任务会继续执行。循环组件会在所有已提交任务执行完毕后退出。
- 默认情况下,异步模式的下各循环子项会在liteFlow提供的默认异步循环线程池中执行,并且可以通过如下两个参数来控制默认线程池的workers数目和队列长度当然,也可以通过自定义线程池来执行异步模式的循环子项,只需要在配置文件中进行如下配置即可,不过此时上述两个参数将不再生效。
<!--配置默认线程池的worker数目--> liteflow.parallel-max-workers=16 <!--配置默认线程池的队列长度--> liteflow.parallel-queue-limit=512
<!--用户可以直接指定自定义的线程池全类名的方式指定异步循环线程池--> liteflow.parallel-loop-executor-class=com.yomahub.liteflow.test.customThreadPool.CustomThreadBuilder
帮助我们改善此文档 (opens new window)
上次更新: 2024/04/09, 18:39:17