Agent Harness:智能体生产落地的工业级运行底座
2026/10/22 16:03:59
🖼 静态类比插图:CPU 灶台占用时间轴(时间片轮转 + 抢占)
同级任务时间片轮转(每 1ms 换人): ┌───────┬───────┬───────┬───────┬───────┬───────┬────▶ 时间 │ TaskA │ TaskB │ TaskC │ TaskA │ TaskB │ TaskC │ └───────┴───────┴───────┴───────┴───────┴───────┘ 高优先级 TaskX 就绪 → 随时插队(抢占): ┌───────┐ │ TaskA │ └───┬───┘ │ TaskX 就绪!A 被打断 ▼ ┌───────────────┬───────┬───────┬────▶ 时间 │ TaskX 抢占运行 │ TaskA │ TaskB │ ← A 回到就绪队列排队 └───────────────┴───────┴───────┴────| 情形 | 调度器行为 |
|---|---|
| 高优先级任务就绪 | 立即抢占 CPU |
| 同级任务就绪 | 时间片轮转(SysTick 每 1ms 切一次) |
| 高优先级任务 osDelay | 挂起等待,低优先级捡漏运行 |
| 所有任务都在等 | Idle 任务运行(CPU 空闲,可低功耗) |
/* 任务A:优先级 High,每 2s 打印一次 */voidTaskA(void*arg){for(;;){printf("[A] high-priority work\r\n");osDelay(2000);}}/* 任务B:优先级 Normal,每 100ms 打印一次 */voidTaskB(void*arg){for(;;){printf("[B] low-priority work\r\n");osDelay(100);}}/* 现象:A 每次醒来必定先执行(抢占 B),B 只能在 A 睡觉时干活 */🖼 静态类比插图:任务状态机(厨师的一生)
┌────────┐ 调度器选中 ┌────────┐ │ 就绪 │ ─────────────▶ │ 运行 │ │ Ready │ ◀───────────── │ Running│ └────────┘ 被抢占/时间片到 └───┬────┘ ▲ ▲ │ │ │ osDelay / 等队列 │ │ │ / 等信号量 ▼ │ │ 延时到/数据到 ┌────────┐ │ └────────────── │ 阻塞 │ │ │ Blocked│ │ └────────┘ │ Resume 恢复 ┌────────┐ └──────────────── │ 挂起 │ vTaskResume │Suspend │ └────────┘ 候场(就绪) → 炒菜(运行) → 等食材(阻塞) → 被经理点名休息(挂起)⚠优先级反转(进阶坑):低优先级任务拿着互斥量不放,高优先级任务在等这个量——中间还有个中优先级任务插队。FreeRTOS 的互斥量有优先级继承机制缓解(低优先级临时提升到等待者的级别),但根本方案是合理设计优先级层次。