Busy-Waiting-vs-Sleep
在等待某个条件成立时(例如 uart 发送缓冲区变空),有两种策略:
1. 忙等待 (Busy Waiting / Spinning)
while(uart_tx_full())
;2. 睡眠
if(uart_tx_full())
sleep(&uart_tx_buf, &uart_lock);- 行为: 进程标记自己为 SLEEPING,调用 sched() 让出 CPU。
- 适用场景: 等待时间较长(毫秒级以上,如磁盘 I/O、用户输入)。
- 优点: 释放 CPU 给其他进程使用,提高吞吐量。