Tokio 采用工作窃取(Work-Stealing)调度器在多线程间均衡任务负载;但无界 channel 会掩盖下游消费不足,必须使用有界 channel + 背压防止内存无限增长。
![]()
一、有界 channel 实现背压
rust
use tokio::sync::mpsc;
#[tokio::main]
async fn main() {
// 有界缓冲区,容量 100,满时 send 会等待
let (tx, mut rx) = mpsc::channel::<u64>(100);
tokio::spawn(async move {
for i in 0..10_000 {
if tx.send(i).await.is_err() { break; }
}
});
while let Some(v) = rx.recv().await {
// 模拟慢消费,上游生产者会自动被背压节流
tokio::time::sleep(std::time::Duration::from_millis(1)).await;
println!("consumed: {v}");
}
}