debian

Debian上的Rust并发编程怎样

小樊
42
2025-12-09 02:58:01
栏目: 编程语言

在 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 上编译运行。

四 性能优化与排障建议

0
看了该问题的人还看了