Question: 什么是 Busy Loop(忙等待循环)?

Busy loop(忙循环),也叫 busy waiting(忙等待) 或 spinning(自旋),指的是程序在等待某个条件满足时,不断地反复检查这个条件,而不是暂停让出 CPU 资源 。 ​

通俗理解

想象你在等外卖,有两种等法:

  • Busy loop(忙等):你每隔一秒就跑去门口看一眼,“到了没?到了没?到了没?” — 你一直在消耗精力,什么别的事也做不了。

  • 正常等待(阻塞/回调):你去做别的事,门铃响了再去开门 — 不浪费任何精力。

你代码里的问题

帖子中的代码就是典型的 busy loop : ​

let my_val = loop {
    if let Some(val) = shared.try_lock() {
        break val;
    }
    // 没拿到锁?继续循环,反复尝试...
};

这段代码在拿不到锁时会不停地循环尝试,持续占用 CPU,毫无效率 。Busy Waiting

关键原则:在 Rust 异步程序中,只要你不在持有锁的情况下调用 .await,用 std::sync::Mutex 是完全安全且高效的,因为 Rust 的异步运行时只会在 .await 点才切换任务 。