perf(tpc): 并行 worker 决策放宽——per_worker_mb 700 降至 350

- 根因:_PickWorkerCount 按可用内存/700MB 决定 worker 数,实测翻译 worker 稳态 ~110MB/峰值 ~300MB,700 过保守——可用内存稍紧即整体降级单 worker 串行(76 文件逐个翻译 1180s vs 并行 ~400s,2-3 倍波动,用户反馈编译不稳定)
- 修复:per_worker_mb 700 -> 350(留峰值余量),更多场景走并行
This commit is contained in:
TermiNexus committed 2026-08-22 06:54:56 +08:00
1 parent c62153a685
commit d092b4d31f
1 file changed
+6 -1
+6 -1
View File
@@ -37,12 +37,17 @@ def _CachedIsFile(path: str) -> bool:
return r return r
def _PickWorkerCount(n_files: int, per_worker_mb: int = 700) -> int: def _PickWorkerCount(n_files: int, per_worker_mb: int = 350) -> int:
"""按可用物理内存动态限制并行 worker 数,避免多进程编译内存峰值 OOM。 """按可用物理内存动态限制并行 worker 数,避免多进程编译内存峰值 OOM。
单 worker 预估 per_worker_mb(Python 解释器 + llvmlite module + 共享 单 worker 预估 per_worker_mb(Python 解释器 + llvmlite module + 共享
符号表快照);系统可用内存不足时降为单 worker 串行,内存充足时回落到 符号表快照);系统可用内存不足时降为单 worker 串行,内存充足时回落到
cpu_count 并行。Windows 用 GlobalMemoryStatusEx 读 ullAvailPhys。 cpu_count 并行。Windows 用 GlobalMemoryStatusEx 读 ullAvailPhys。
per_worker_mb=350(2026-08-22 从 700 调低):实测翻译阶段 worker 稳态
内存 ~110MB(tasklist 观察)、峰值 ~300MB;原 700MB 过保守——可用内存
稍紧(<2.8GB)就整体降级单 worker 串行,76 文件逐个翻译 1180s,并行
时 ~400s,时间波动 2-3 倍(用户反馈"编译时间不稳定"的根因之一)。
""" """
base = min(os.cpu_count() or 4, n_files) base = min(os.cpu_count() or 4, n_files)
if base <= 1: if base <= 1: