Auto-Sync:FIFO 队列与 worker pool 本节摘要:文档和代码会变,知识资产也要跟着更新,否则会过时误导 Agent。本节讲清 Auto-Sync 的两个核心机制:FIFO 队列(保证更新按顺序处理,不乱序)与 worker pool(并发处理提升吞吐)。这两个机制让知识资产「一直新鲜」——源变化触发增量更新,后台并发处理,既保序又高效。理解 Auto-Sync,你就理解了知识资产如何「持续复利」而非「一次导入就过时」。
本节摘要:文档和代码会变,知识资产也要跟着更新,否则会过时误导 Agent。本节讲清 Auto-Sync 的两个核心机制:FIFO 队列(保证更新按顺序处理,不乱序)与 worker pool(并发处理提升吞吐)。这两个机制让知识资产「一直新鲜」——源变化触发增量更新,后台并发处理,既保序又高效。理解 Auto-Sync,你就理解了知识资产如何「持续复利」而非「一次导入就过时」。
没有 Auto-Sync,知识资产会随时间与源脱节,变成「过时的谎言」:
没有 Auto-Sync 的退化 t1: 喂代码库 → CodeGraph 构建 → 准确 t2: 源代码改了(重构了鉴权) → CodeGraph 没更新 t3: Agent 查 CodeGraph → 拿到过时信息 → 误导! → 过时的知识比没有知识更危险(因为 Agent 会信)
Auto-Sync 解决的就是这个——源变化时自动触发增量更新,让知识资产始终与源同步:
| 有无 Auto-Sync | 知识新鲜度 | 维护成本 |
|---|---|---|
| 无 | 随时间退化 | 需人工重建 |
| 有 | 随源自动更新 | 自动,免维护 |
关键概念:Auto-Sync 让知识资产成为「活的」资产——它会随源演进,而不是「死快照」。这是「可持续复利」在工程上的保障:你不必每次源变了都人工重建,系统自己保持同步。
Auto-Sync 的第一个机制是 FIFO(先进先出)队列,它保证更新按触发的顺序处理:
FIFO 队列的作用 源仓库连续 push 三次提交(Commit1, Commit2, Commit3) → 三个更新任务进队列(按时间顺序) → worker 按顺序处理:Commit1 → Commit2 → Commit3 为什么不能乱序? Commit2 依赖 Commit1 的结果(增量计算) 若先处理 Commit3 再处理 Commit1 → 状态错乱 → 必须按顺序(FIFO)
| 场景 | 不用 FIFO 的后果 | FIFO 保障 |
|---|---|---|
| 连续多次提交 | 乱序处理导致状态错 | 按提交顺序处理 |
| 大更新+小更新交错 | 小更新插队打断大更新 | 排队等大更新完 |
| 依赖型变更 | 后续依赖被先处理 | 先决条件先处理 |
FIFO 是「正确性」保障——增量更新本质是有序的(后一个基于前一个),乱序会破坏一致性。这在第 6 章的抽取队列里也是同样道理,凡是「增量、有序」的任务都用 FIFO。
光有队列还不够——如果只有一个 worker 串行处理,大量更新会堆积。worker pool 提供并发:
worker pool 的作用 队列里堆积了 100 个更新任务(如一个大仓库刚 push 了很多) ├─ 单 worker:串行处理,慢 └─ worker pool(N 个 worker): 并发取任务处理(每个 worker 处理不同任务) → 吞吐提升 N 倍 注意:同一资产的任务仍需有序(FIFO),不同资产的可并发
worker pool 的设计要点是「并发粒度」——通常按「资产」或「文件」粒度并发,而非任意并发:
| 并发粒度 | 效果 |
|---|---|
| 不同资产间 | 可并发(A 的更新与 B 的更新无关) |
| 同一资产内 | 需有序(同一 CodeGraph 的提交按顺序) |
💡 技巧:这种「队列保序 + worker pool 并发」是异步任务系统的经典模式。它平衡了「正确性」(同资产有序)与「吞吐」(跨资产并发)。理解这个模式,你看第 6 章的抽取队列、第 8 章的请求处理,都是它的变体——这是系统里反复出现的「公共模式」。
把 FIFO + worker pool 合起来,Auto-Sync 的完整流程:
Auto-Sync 完整流程 ① 源变化检测 仓库 push / 文档更新 → 检测到变化 ② 任务入队 生成增量更新任务 → 进 FIFO 队列(按时间/依赖序) ③ worker pool 取任务 N 个 worker 并发取任务(不同资产可并发) ④ 增量处理 对变化的文件/符号做增量 ingest/index (不全量重建,只处理变化部分) ⑤ 更新知识资产 合并增量结果 → 知识资产保持新鲜 ⑥ 状态跟踪 处理中 / ready / failed(可重试)
注意「增量处理」——Auto-Sync 不会全量重建知识资产,只处理变化的部分。这让同步成本可控:小提交只触发小更新,不会每次都全量重跑。
几个值得知道的工程权衡:
| 权衡点 | 取舍 |
|---|---|
| 同步频率 | 实时同步新鲜但频繁触发,攒批同步省资源但延迟 |
| worker 数量 | 多则快但占资源,少则省但堆积 |
| 增量 vs 全量 | 增量省但可能累积误差,周期性全量重建纠偏 |
| 失败处理 | 同步失败要可重试,不能让知识资产「卡在中间状态」 |
⚠️ 注意:增量更新虽高效,但长期只增量可能累积误差(小变化叠多了,状态可能漂移)。实践上常配「周期性全量重建」做纠偏——比如每周全量重建一次 CodeGraph,平时用增量同步。这是「增量高效 + 全量准确」的混合策略。
第 7 章到此完成——Wiki ingest、CodeGraph 索引、按需调用、Auto-Sync,知识引擎的全貌已清。下一章进入全书最硬核的第二章——MemoryProxy 八步管道精读。