Adaptive tick frequency: exponential backoff when idle #1

Closed
opened 2026-04-17 14:03:58 +00:00 by xiaomo · 0 comments
Owner

背景

Pulse daemon 当前以固定 tickMs 运行。无 active topic 时浪费资源(也是 Cursor token 烧钱的间接原因)。

方案

空闲时 tickMs 指数退避,有新事件时立即恢复。

参数

  • baseTickMs: 5000 (5s)
  • maxTickMs: 300000 (5min)
  • 退避因子: 2x
  • 退避序列: 5s → 10s → 20s → 40s → 80s → 160s → 300s

触发退避

  • tick 结果无 effects 且无 active topics

触发恢复

  1. 新 topic 创建/激活
  2. vitals 事件触发
  3. 外部 event 写入(collect 结果)

实现位置

daemon tick 循环层(不在 Rule 里)

关键细节

  • 恢复时用 AbortController 中断当前 sleep + 立即 tick
  • 不能等当前 sleep 结束(最坏 5min 才响应)

验收

  • 无 active topic 时 tickMs 递增
  • 新事件写入后 tickMs 立即恢复 baseTickMs
  • 恢复时中断 sleep 立即 tick
  • 单测覆盖退避 + 恢复逻辑
  • bun test 全绿,tsc --noEmit 通过
## 背景 Pulse daemon 当前以固定 tickMs 运行。无 active topic 时浪费资源(也是 Cursor token 烧钱的间接原因)。 ## 方案 空闲时 tickMs 指数退避,有新事件时立即恢复。 ### 参数 - baseTickMs: 5000 (5s) - maxTickMs: 300000 (5min) - 退避因子: 2x - 退避序列: 5s → 10s → 20s → 40s → 80s → 160s → 300s ### 触发退避 - tick 结果无 effects 且无 active topics ### 触发恢复 1. 新 topic 创建/激活 2. vitals 事件触发 3. 外部 event 写入(collect 结果) ### 实现位置 daemon tick 循环层(不在 Rule 里) ### 关键细节 - 恢复时用 AbortController 中断当前 sleep + 立即 tick - 不能等当前 sleep 结束(最坏 5min 才响应) ### 验收 - [ ] 无 active topic 时 tickMs 递增 - [ ] 新事件写入后 tickMs 立即恢复 baseTickMs - [ ] 恢复时中断 sleep 立即 tick - [ ] 单测覆盖退避 + 恢复逻辑 - [ ] bun test 全绿,tsc --noEmit 通过
This repo is archived. You cannot comment on issues.
No Label
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/pulse#1