MTPawnTicks - 多线程 Pawn 优化
MTPawnTicks — Pawn Tick 多线程优化
通过 Harmony Transpiler 将 Pawn 的 13 个 Tick 子系统从主线程剥离,
利用 Parallel.ForEach 在多核 CPU 上并行执行,同时支持按 Map 分组实现跨地图并行。
两个维度叠加:子系统并行 x Map 并行。
【并行子系统(13 个)】
Pawn.Tick() — 4 个
HealthTick / EquipmentTrackerTick / InventoryTrackerTick / GeneTrackerTick
Pawn.TickInterval() — 9 个
MindState / Needs / Skills / Apparel / Relations
HealthInterval / Ideo / Records / Guilt
【并行策略】
· 子系统维度 — 13 个子系统各自用 Parallel.ForEach 并行处理所有 Pawn
· Map 维度 — 多 Map 时各 Map 独立线程同时执行,单 Map 自动退化
· 双层叠加 — Map 并行 x 子系统并行,充分利用多核 CPU
【安全保障】
· 异常隔离 — 单 Pawn 崩溃不影响其他 Pawn,单 Map 崩溃不影响其他 Map
· 全局回退 — Parallel.ForEach 失败时自动回退串行执行
· RNG 隔离 — Rand.PushState + per-thread seed,每个线程独立随机数
· 最小阈值 — Pawn 数量低于 15 时跳过并行,避免小数量额外开销
· 独立开关 — 13 个子系统 + Map 并行均可通过 MTPSettings 单独关闭
【兼容 Mod(已验证)】
Performance Esmolas ✅
BuildingTickOptimizer ✅
HealthTabOptimizer ✅
Ideo Tick Optimization ✅
Better GC: Mothballed and World Pawns ✅
Performance Optimizer ✅
【推荐搭配优化 Mod】
· RocketMan — 多线程日志/统计/DLC 优化,与本 Mod 互补
· Dubs Performance Analyzer — TPS 实时监控,调试性能瓶颈必备
· Performance Optimizer — 方法缓存/UI 节流,优化方向不重叠
· Toggleable Overlays — 跳过不需要的覆盖层绘制,提升 FPS
· Toggleable Readouts — 优化读取列表面板,减少 UI 开销
【使用注意】
· 50+ Pawn 且大量 Hediff 时效果最佳,多 Map 收益更大
· 深度 Patch Hediff/Gene/Need 的 Mod 可能存在兼容问题
· 异常时搜索日志 [RimMT],可逐个关闭子系统排查