Skip to content

ADR-257: maxWorkers 12→8:共享机器并发场景的资源经济学 — 并发实测:双 vitest 各 12 worker(24 核拉满)69.4s,各 8 worker 64.3s——24 核全占后 CPU 竞争使墙钟反超;单 AI 8 核仅慢 3.7s(9%)

状态: ✅ 已采纳(2026-08-10) 日期: 2026-08-10

背景

ADR-219(2026-07-31)以单 AI 独占 24 核机器为前提实测「8/12/16 worker 墙钟 55.42/55.95/56.21s 均在噪声带内」,取 maxWorkers=12。该结论未考虑共享机器 场景:本项目常有两个 AI 同时工作,各 12 worker = 24 个 fork 进程抢满 24 核, CPU 时间片竞争使墙钟不随 worker 数线性下降。

2026-08-10 并发实测(当前 283 文件 / 4934 用例,环境分流 + 同系列合并后):

场景墙钟相对
单 AI · 4 worker56.2s+40%
单 AI · 8 worker43.7s+9%
单 AI · 12 worker40.0s基准
双 AI 并发 · 各 12(24 核拉满)69.4s+73%
双 AI 并发 · 各 8(16 核留 8 余量)64.3s比双 12 快 5s

决策

  1. maxWorkers / minWorkers:12 → 8frontend/vitest.config.ts)。
  2. 取代范围:仅取代 ADR-219 的「12 路最优」参数论断。ADR-219 其余决策 全部保留:isolate=true(isolate=false 三次实验判死,vi.mock 单例穿透)、 预构建三件套(deps.optimizer)、no-isolate 不采纳。
  3. 依据
    • 单 AI:8 核损失 3.7s(9%),可接受;
    • 双 AI 共享:各 8 核比各 12 核快 5s(24 核全占后每 worker 时间片不足, 墙钟反超),且系统留 8 核余量给 IDE/构建/另一 AI;
    • 4 核不可取(56s,+40%)。
  4. CI 不受影响:2 核 runner 的 worker 数由机器核数钳制,maxWorkers=8 只是上限。

备选方案

  • 保持 12:单 AI 独占机器时最快,但双 AI 场景 24 核拉满互相拖慢(69.4s), 且无资源余量。弃。
  • maxWorkers=8 + minWorkers=4:vitest 的 min/max 池按需增减不感知外部进程, 低负载不会主动降 worker,收益存疑。弃(保持 min=max=8 的确定性)。
  • 动态自适应(maxWorkers=CPU-1):默认值即如此,双 AI 时仍会拉满。弃。

影响

  • frontend/vitest.config.ts:maxWorkers/minWorkers 12→8,注释记录并发数据。
  • 单 AI 全量 40.0s → 43.7s(+9%);双 AI 并发 69.4s → 64.3s(-7%)。
  • ADR-219 状态行标注「被 [ADR-257] 取代」(仅 maxWorkers 参数;isolate/预构建保留)。

相关文档

ADR-219 测试并发调优与 isolate 污染治理(被取代方,maxWorkers 部分) ADR-255 测试环境分流(协同路线) ADR-256 性能导向的单测文件组织(协同路线)