报告 004 · 控制通路、取消与资源占用
日期:2026-09-19。证据层次:确定性的受限调度模型。执行了 24 组队列场景、9 组流式场景和 2 组取消额度场景;没有运行真实语音、模型推理、操作系统抢占或 GPU 负载。
1. 问题与共同条件
本实验检验“给停止消息高优先级或单独队列,就能及时停止”的隐含前提,并区分取消通知、播放约束和资源回收。
协议在模型执行前写入实验说明。队列对照共同使用 2 个相同执行者、6 个等待位置、不可抢占作业。保留方案限制普通作业最多占 5 个等待位置;专用方案进一步将两个执行者分为一个普通、一个控制,普通工作不能借用控制资源。总资源数量相同,使用约束不同。
两项长作业在 t=0 到达,2 或 6 项短作业在 t=1 到达,控制消息在 t=2 到达。短作业耗时 10,控制处理耗时 1,长作业时长分别为 10、40、100。控制完成表示模型中的处理任务结束,不等于设备已经停止。
所有时间均为抽象 tick,不能换算成真实毫秒。只含一条控制消息,不测试控制洪泛、控制任务之间的互斥或共享锁。
2. 队列未满:优先级仍受运行中作业约束
当 t=1 只有 2 项短作业时,所有方案接纳控制消息:
| 长作业时长 | 共享 FIFO 的控制延迟 | 共享优先级 | 优先级 + 保留队列位置 | 专用控制执行者 |
|---|---|---|---|---|
| 10 | 19 | 9 | 9 | 1 |
| 40 | 49 | 39 | 39 | 1 |
| 100 | 109 | 99 | 99 | 1 |
延迟从 t=2 到控制任务完成计算。长作业时长 100 时,共享优先级在 t=100 才开始控制任务,排队等待 98,执行 1,共 99。优先级让控制任务跳过等待中的短作业,却不能抢占正在占用执行者的长作业。
专用方案的普通任务也付出代价:长作业时长 100 时,其他方案在 t=110/111 完成全部 4 项普通任务,专用方案到 t=220 才完成;t=200 时仅完成两项长作业。低控制延迟不是免费增加了一份执行资源。
3. 队列占满:接纳与执行是两个问题
以下固定长作业时长 100,t=1 到达 6 项短作业,普通任务总 offered 数为 8:
| 策略 | 控制是否接纳 | 控制开始/完成 | 控制延迟 | 普通接纳/拒绝 | t≤200 普通完成 | 普通全部完成时刻 |
|---|---|---|---|---|---|---|
| 共享 FIFO | 否 | — | — | 8/0 | 8 | 130 |
| 共享优先级 | 否 | — | — | 8/0 | 8 | 130 |
| 优先级 + 保留队列位置 | 是 | 100/101 | 99 | 7/1 | 7 | 130 |
| 专用控制执行者 + 保留位置 | 是 | 2/3 | 1 | 6/2 | 2 | 240 |
前两组在 t=2 直接拒绝控制消息,故延迟是缺失而不是 0。共享优先级没有包含驱逐普通任务或额外控制接纳机制;若另加这些机制,需要单独验证,不能归功于优先级本身。
保留一个队列位置解决本例的接纳问题,但仍等到 t=100。专用方案的第二个长作业从 t=0 开始就在普通队列等待,因而会比共享保留方案多拒绝一个短作业。这里将所有拒绝显式计入,避免只比较成功控制消息的延迟。
专用执行者假设其执行资源、锁和完成路径确实独立;真实系统中“另起 goroutine”或“另建队列”不自动满足这些前提。本实验没有证明应永久闲置一个 CPU/GPU,也没有比较有界抢占、资源借用与及时归还等替代策略。
4. 取消后,入口过滤仍会漏掉已缓存片段
三组都在取消时立即停止当前片段、将轮次从 1 推进到 2;提供者不配合取消。旧缓存片段已在取消前通过入口,迟到片段在取消后到达,另有一个新轮次片段。
在取消时刻 2、时刻 5,以及“取消与片段在同 tick,取消先发生”三个固定场景中,计数一致:
| 策略 | 取消后旧轮次实际播放量 | 新轮次播放量 | 入口丢弃 | 播放边界丢弃 |
|---|---|---|---|---|
| 只取消当前播放 | 2 | 1 | 0 | 0 |
| 再加入口轮次过滤 | 1 | 1 | 1 | 0 |
| 再加播放边界轮次复核 | 0 | 1 | 1 | 1 |
每个计数单位是一个 tick 的播放,本例两个待播放旧片段各长 1。入口过滤丢弃迟到片段,但已缓存片段仍播放;播放边界复核也拒绝已缓存旧片段,同时保留新输出。
取消前已经播放的 2 或 5 tick 保留为已发生事实。本例的零迟到播放依赖两个显式条件:取消能立即停止当前片段;读取当前轮次与开始播放在同一个 owner 的顺序中完成。真实音频设备的不可撤销缓冲、停止确认延迟、跨线程竞争和跨重启身份均未验证。
5. 本地取消不应被当作远端资源释放
额度为 1,旧工作 t=0~10 持续运行并忽略 t=2 的本地取消,新工作 t=3 到达、需要 2 tick。t=10 才收到可靠的旧工作完成证据:
| 额度策略 | 远端同时执行峰值 | 超额 tick | 新工作开始/完成 | 新工作等待 |
|---|---|---|---|---|
| 本地取消即归还 | 2 | 2 | 3/5 | 0 |
| 直到完成证据才归还 | 1 | 0 | 10/12 | 7 |
保留占用避免本例的额度穿透,代价是新工作多等 7 tick。如果提供者永久失联,本模型没有自动解决方案;需记录不明责任及明确的核对/管理策略,不能虚构停止确认,也不能将本例等待时长当作线上上界。
6. 设计含义
- 将控制保障分成接纳、调度、执行资源和实际设备停止四层;保留队列容量只回答第一层。
- 暂保留专用控制路径为候选,同时研究有界不可抢占段及资源分配;没有数据支持固定线程数、设备数或硬实时延迟。
- 当前轮次在实际输出 owner 的播放边界复核;入口过滤用于提前丢弃,不能替代最终检查。停止当前播放与阻止以后旧片段要一起考虑。
- 取消请求、本地停止等待、远端停止证据、资源清理分别记录;保留未确认工作的实际占用责任。
本实验没有评价普通任务的认知质量、任务间公平性、控制负载高峰、声卡缓冲或现实安全停止性能。
运行:python3 experiments/realtime-control/model.py。Python 3.14.7,仅标准库,无网络和随机输入。
脚本 SHA-256:eeb3c006e1cc707e02253c4c22eccd5f7d6d0ace8a3c1cce348fab707793e831。原始结果同时包含预登记协议哈希。
首次执行即通过所有固定场景、作业守恒、等待容量、执行者占用、时间计算和播放量断言,无失败重跑。断言验证该有限模型的自洽性,不证明真实调度器或设备满足其假设。
数据可用性
本报告公开实验条件、汇总统计和失败分析。原始输入、脚本及逐次运行记录未随报告发布,因此不能仅凭本文独立复现实验。