From e9e293fdbe4dfaefe96c274245b337a57ed963f5 Mon Sep 17 00:00:00 2001 From: jason <2353220944@qq.com> Date: Mon, 4 Nov 2024 10:44:54 +0800 Subject: [PATCH] code review --- .../flow/parallel/strategy/ParallelStrategyExecutor.java | 8 ++++---- .../com/yomahub/liteflow/parser/helper/ParserHelper.java | 3 ++- .../java/com/yomahub/liteflow/thread/ExecutorHelper.java | 5 +++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/strategy/ParallelStrategyExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/strategy/ParallelStrategyExecutor.java index 42cb958de..2590f40c1 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/strategy/ParallelStrategyExecutor.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/parallel/strategy/ParallelStrategyExecutor.java @@ -127,10 +127,10 @@ public abstract class ParallelStrategyExecutor { protected ExecutorService getWhenExecutorService(WhenCondition whenCondition, Integer slotIndex) { LiteflowConfig liteflowConfig = LiteflowConfigGetter.get(); - - // 如果设置了线程池隔离,则每个 when 都会有对应的线程池,这是为了避免多层嵌套时如果线程池数量不够时出现单个线程池死锁。用线程池隔离的方式会更加好 - // 如果 when 没有超多层的嵌套,还是用默认的比较好。 - // 默认设置不隔离。也就是说,默认情况是一个线程池类一个实例,如果什么都不配置,那也就是在 when 的情况下,全局一个线程池。 + //线程池的优先级 condition层级>chain层级>全局体系 + // 1、如果设置了线程池隔离,则每个 when 都会有对应的线程池,这是为了避免多层嵌套时如果线程池数量不够时出现单个线程池死锁。用线程池隔离的方式会更加好 + // 2、如果在chain上自定义线程池,同一个chain下的when+异步线程池共享一个线程池 + // 3、默认全局一个线程池,所有的when+异步共享一个线程池 ExecutorService parallelExecutor; String chainId = DataBus.getSlot(slotIndex).getChainId(); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java index 128f428cc..98b118aa6 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/helper/ParserHelper.java @@ -344,7 +344,8 @@ public class ParserHelper { e.attributeValue(THREAD_POOL_EXECUTOR_CLASS); LiteFlowChainELBuilder builder = - LiteFlowChainELBuilder.createChain().setChainId(chainId).setNamespace(namespace).setThreadPoolExecutorClass(threadPoolExecutorClass); + LiteFlowChainELBuilder.createChain().setChainId(chainId).setNamespace(namespace) + .setThreadPoolExecutorClass(threadPoolExecutorClass); // 如果有route这个标签,说明是决策表chain // 决策表链路必须有route和body这两个标签 diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorHelper.java b/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorHelper.java index a14c16fc3..37bd1217f 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorHelper.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/thread/ExecutorHelper.java @@ -137,6 +137,11 @@ public class ExecutorHelper { String chainId = DataBus.getSlot(slotIndex).getChainId(); Chain chain = FlowBus.getChain(chainId); + //线程池的优先级 condition层级>chain层级>全局体系 + // 1、如果设置了线程池隔离,则每个 异步 都会有对应的线程池,这是为了避免多层嵌套时如果线程池数量不够时出现单个线程池死锁。用线程池隔离的方式会更加好 + // 2、如果在chain上自定义线程池,同一个chain下的when+异步线程池共享一个线程池 + // 3、默认全局一个线程池,所有的when+异步共享一个线程池 + if (ObjectUtil.isNotEmpty(loopCondition.getThreadPoolExecutorClass())) { //condition层级线程池 parallelExecutor = getExecutorService(loopCondition.getThreadPoolExecutorClass(),