mirror of
https://ghfast.top/https://github.com/aeroxw/tick-stock-panel.git
synced 2026-09-12 20:14:16 +08:00
PanelCache 把 compute_fn 放锁外避免不同 key 串行化, 但代价是同 key 冷启动踩踏: 优化器/批量回测的 max_workers 个线程几乎同时 miss 空缓存, 全部在锁外并行调 compute_fn, 同一面板被并行加载 N 份 (N=并发线程数), 而非承诺的"只加载一次"。全市场 parquet 冷扫 ×N 的 IO/内存峰值。 改为 single-flight: 同 key 只推举一个 leader 执行 compute, 其余线程 登记为跟随者等 leader 结果复用。要点: - compute 仍在锁外 → 不同 key 依旧并发, 保留原设计优点, 只消除同 key 重复。 - 失败不缓存: leader 抛错时摘除 inflight 让后续重试, 异常透传所有跟随者。 新增 2 个并发回归测试: 8 线程同 key 踩踏断言 compute 仅 1 次; 失败路径断言异常透传全部等待者且不缓存失败可重试。