等待、暂停与恢复不是同一种机制
一句话
Pysolate 有三种不同的“等一下”:approval 保留同一次 pending call,workflow 保存显式逻辑 State 后用 fresh Guest 恢复,cold-I/O continuation 则暂时降低同一运行 slot 的内存驻留;它们不能统称为 checkpoint/restore。
先看一个例子
一个数据分析 Agent 可能遇到三种等待:
- 准备访问敏感数据,等负责人批准;
- 完成第一阶段后等明天的新输入,再继续工作流;
- 正在等一个较慢的 Host call,希望等待期间少占一些物理内存。
三件事看起来都像“程序暂停”,实际需要保留的状态完全不同。第一种要保住当前调用关系,第二种应当把进度写成明确记录,第三种只是在同一次执行中给内存降温。
真实机制
| 机制 | 谁拥有等待状态 | 保留什么 | 怎样继续 |
|---|---|---|---|
| Approval suspension | Host Approval Controller 与 Broker | 仅限 bounded ApprovalLease、live-only playback 且无 pre-dispatch 的 capability;保留同一 Guest 中 pending ABI call、RequestID、参数 digest 和 lease | approve/reject 后,同一 call 返回或终结 |
| Workflow resume | Host workflow evaluator 与显式 State | graph digest、node records、WaitNodeID、authority envelope 等逻辑数据 | 销毁旧 Guest;校验 State 后创建 fresh Guest |
| Cold-I/O continuation | 当前 Wazero module/slot 与 Host policy | 仅限 Linux PreparedRuntime + MemoryCOW 和显式 bounded ColdIOPolicy;保留同一 call、private mapping 和 bounded evidence | Host call 返回后恢复当前 slot;Linux 可尝试 MADV_COLD/PAGEOUT |
Approval 的线性化点仍是 BeginDispatch。等待批准期间 handler 没有启动;批准后才可能执行。这个等待不是可跨进程携带的 continuation token。
Workflow 到达 Wait 时会关闭 Guest。State 不包含 Python frame、heap、globals、文件描述符或 WASM memory。Resume 会校验 graph、roots、privacy 和当前 authority,必要时让依赖旧 authority 的记录失效,然后创建新 execution identity 和 fresh Guest。当前 Suspended State 没有内置 consumed/one-shot marker;调用方必须自行防止重复 Resume。
Cold-I/O continuation 不销毁 Guest,也不序列化逻辑 State。它保留当前 slot,在等待时给私有内存页提供回收建议;建议可能失败,恢复时还会付出 page fault 成本。
普通 cancel 或 timeout 若不处于这些明确协议中,只会 abort 当前执行。Approval suspension 和 cold-I/O 也不是任意 Host call 或任意 Guest 都能调用的通用暂停 API。当前实现没有一个能恢复任意 Python 程序的通用 token。
为什么重要
技术上: 每种等待都有明确 owner 和恢复语义。系统不会把“重新计算后续节点”“返回 pending Host call”和“恢复同一内存 slot”混成一种不可靠的 snapshot 机制。
产品和业务上: 长工作流可以释放旧 Guest,审批操作可以保留用户正在批准的那一次请求,内存紧张时又能单独选择 cold tier。团队可以按等待时长和资源成本选机制,而不是长期保留所有解释器状态。
不能推出什么
- 当前没有通用 Python frame、heap 或 WASM stack checkpoint/restore。
- Approval/cold continuation 不是 crash-safe、跨进程或无限期恢复机制。
- Workflow
State是显式逻辑记录,不是 bearer capability;恢复时仍要重新检查当前 authority。
术语卡
- Approval suspension:同一受控调用等待 Host 决策。
- Workflow State:可校验的显式逻辑进度记录。
- Resume:用 State 和当前 authority 创建 fresh execution。
- Cold-I/O continuation:同一 slot 等待 Host I/O 时的内存 tiering。
- Checkpoint/restore:保存并恢复完整执行状态;当前 Pysolate 不提供通用实现。
继续阅读
- 前置:Fresh Guest 的真实含义
- 后续:Prepared runtime 与 private-COW
- 说明文档:
implementation/08b-suspension-and-resume.md、defense/limitations.md - 源码 owner:
runtime/workflow/evaluator.go、runtime/approval/controller.go、runtime/engine/wazero/cold_io.go