notes

Log | Files | Refs | README

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 点才切换任务 。