在 Debian 上进行 Rust 并发编程的要点
一 开发生态与适用性
二 常用并发模型与适用场景
三 快速上手示例
use std::sync::mpsc;
use std::thread;
fn main() {
let (tx, rx) = mpsc::channel();
for i in 0..4 {
let tx = tx.clone();
thread::spawn(move || tx.send(i).unwrap());
}
drop(tx); // 关闭发送端,使接收端能正常结束
for v in rx { println!("got = {}", v); }
}
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
let c = Arc::new(Mutex::new(0));
let mut hs = vec![];
for _ in 0..10 {
let c = Arc::clone(&c);
hs.push(thread::spawn(move || *c.lock().unwrap() += 1));
}
for h in hs { h.join().unwrap(); }
println!("counter = {}", *c.lock().unwrap());
}
use rayon::prelude::*;
fn main() {
let s: i32 = (0..1_000_000).into_par_iter().sum();
println!("sum = {}", s);
}
// Cargo.toml: [dependencies] tokio = { version = "1", features = ["full"] }
use tokio::net::TcpListener;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let listener = TcpListener::bind("127.0.0.1:8080").await?;
loop {
let (mut socket, _) = listener.accept().await?;
tokio::spawn(async move {
let mut buf = [0; 1024];
while let Ok(n) = socket.read(&mut buf).await {
if n == 0 { break; }
if socket.write_all(&buf[..n]).await.is_err() { break; }
}
});
}
}
以上示例覆盖了线程/通道、共享内存、并行迭代与异步 I/O 的主流用法,可直接在 Debian 上编译运行。
四 性能优化与排障建议