busy_loop.md (1264B)
1 # Busy Loop 2 3 ### Question: 什么是 Busy Loop(忙等待循环)? 4 5 Busy loop(忙循环),也叫 busy waiting(忙等待) 或 6 spinning(自旋),指的是程序在等待某个条件满足时,不断地反复检查这个条件,而不是暂停让出 7 CPU 资源 。 8 9 #### 通俗理解 10 11 想象你在等外卖,有两种等法: 12 13 - Busy loop(忙等):你每隔一秒就跑去门口看一眼,"到了没?到了没?到了没?" — 14 你一直在消耗精力,什么别的事也做不了。 15 16 - 正常等待(阻塞/回调):你去做别的事,门铃响了再去开门 — 不浪费任何精力。 17 18 #### 你代码里的问题 19 20 帖子中的代码就是典型的 busy loop : 21 22 ```rust 23 let my_val = loop { 24 if let Some(val) = shared.try_lock() { 25 break val; 26 } 27 // 没拿到锁?继续循环,反复尝试... 28 }; 29 ``` 30 31 这段代码在拿不到锁时会不停地循环尝试,持续占用 CPU,毫无效率 32 。[Busy Waiting](https://www.geeksforgeeks.org/operating-systems/busy-waiting-in-os/) 33 34 关键原则:在 Rust 异步程序中,只要你不在持有锁的情况下调用 .await,用 35 std::sync::Mutex 是完全安全且高效的,因为 Rust 的异步运行时只会在 .await 36 点才切换任务 。