From bf2c55da5d8572b58566dcc27c04d4568a599191 Mon Sep 17 00:00:00 2001 From: zch Date: Fri, 21 Feb 2025 16:59:57 +0800 Subject: [PATCH] =?UTF-8?q?perf(nanjing):=20=E4=BC=98=E5=8C=96=E6=9D=A1?= =?UTF-8?q?=E7=A0=81=E5=A4=84=E7=90=86=E6=80=A7=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 调整最优线程数下限从 4 个增加到 8 个 - 提高并行窗口大小上限从 4 个批次增加到 24 个批次 - 将各个阶段的超时时间从 300 秒增加到 600 秒, --- .../web/controller/nanjing/SelectProRpListController.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/nanjing/SelectProRpListController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/nanjing/SelectProRpListController.java index 29d33f62..6edb1bf1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/nanjing/SelectProRpListController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/nanjing/SelectProRpListController.java @@ -131,7 +131,7 @@ public class SelectProRpListController extends BaseController // 计算最优线程数 int CPU_CORES = Runtime.getRuntime().availableProcessors(); int OPTIMAL_THREADS = Math.min( - Math.max(CPU_CORES / 4, 4), // CPU核心数的1/4,但不少于4个线程 + Math.max(CPU_CORES / 4, 8), // CPU核心数的1/4,但不少于8个线程 12 // 最大不超过12个线程 ); // 线程池配置 @@ -151,7 +151,7 @@ public class SelectProRpListController extends BaseController int totalBatches = (barcodes.size() + BATCH_SIZE - 1) / BATCH_SIZE; // 向上取整计算总批次数 // 按顺序处理批次,但使用较小的并行窗口 - int PARALLEL_WINDOW = Math.min(4, OPTIMAL_THREADS); // 并行窗口大小,最多4个批次同时处理 + int PARALLEL_WINDOW = Math.min(24, OPTIMAL_THREADS); // 并行窗口大小,最多12个批次同时处理 for (int windowStart = 0; windowStart < totalBatches; windowStart += PARALLEL_WINDOW) { List>> windowFutures = new ArrayList<>(); int windowEnd = Math.min(windowStart + PARALLEL_WINDOW, totalBatches); @@ -181,12 +181,12 @@ public class SelectProRpListController extends BaseController try { CompletableFuture windowComplete = CompletableFuture .allOf(windowFutures.toArray(new CompletableFuture[0])); - windowComplete.get(300, TimeUnit.SECONDS); + windowComplete.get(600, TimeUnit.SECONDS); // 按提交顺序收集当前窗口的结果 for (CompletableFuture> future : windowFutures) { try { - List batchResult = future.get(300, TimeUnit.SECONDS); + List batchResult = future.get(600, TimeUnit.SECONDS); printInfo.addAll(batchResult); logger.info("当前处理进度: {}/{}", Math.min((windowStart + windowFutures.indexOf(future) + 1) * BATCH_SIZE, barcodes.size()),