linux

Linux下Rust并发编程实战

小樊
45
2025-11-14 17:26:21
栏目: 编程语言

Linux 下 Rust 并发编程实战指南

一 环境准备与项目初始化

二 核心并发模型与最小示例

三 实战示例 多线程并行计算与原子计数

// Cargo.toml
// [dependencies]

use std::sync::{Arc, Mutex};
use std::sync::atomic::{AtomicUsize, Ordering};
use std::thread;

fn main() {
    const N: usize = 10;
    const INCR: usize = 100_000;

    // 1) 使用 Mutex + Arc
    let mtx = Arc::new(Mutex::new(0usize));
    let mut handles = Vec::with_capacity(N);
    for _ in 0..N {
        let m = Arc::clone(&mtx);
        handles.push(thread::spawn(move || {
            for _ in 0..INCR {
                *m.lock().unwrap() += 1;
            }
        }));
    }
    for h in handles { h.join().unwrap(); }
    println!("Mutex 结果: {}", *mtx.lock().unwrap());

    // 2) 使用 AtomicUsize
    let atomic = Arc::new(AtomicUsize::new(0));
    let mut handles = Vec::with_capacity(N);
    for _ in 0..N {
        let a = Arc::clone(&atomic);
        handles.push(thread::spawn(move || {
            for _ in 0..INCR {
                a.fetch_add(1, Ordering::SeqCst);
            }
        }));
    }
    for h in handles { h.join().unwrap(); }
    println!("Atomic 结果: {}", atomic.load(Ordering::SeqCst));
}

四 实战示例 异步高并发回显服务器

// Cargo.toml
// [dependencies]
// tokio = { version = "1", features = ["full"] }

use tokio::net::TcpListener;
use tokio::io;

#[tokio::main]
async fn main() -> io::Result<()> {
    let listener = TcpListener::bind("127.0.0.1:8080").await?;
    println!("Listening on 127.0.0.1:8080");

    loop {
        let (mut socket, _) = listener.accept().await?;
        tokio::spawn(async move {
            let mut buf = vec![0u8; 1024];
            loop {
                let n = match socket.read(&mut buf).await {
                    Ok(0) => return, // 对端关闭
                    Ok(n) => n,
                    Err(e) => {
                        eprintln!("read error: {}", e);
                        return;
                    }
                };
                if let Err(e) = socket.write_all(&buf[..n]).await {
                    eprintln!("write error: {}", e);
                    return;
                }
            }
        });
    }
}

五 性能与工程实践建议

0
看了该问题的人还看了