Rust - 线程

在计算机科学里,线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一台支持多线程的计算机,其中央处理器(CPU)能够在同一时间内处理多个线程,进而显著提升系统的整体性能。

Rust 的线程设计遵循「内存安全 + 高性能」原则,通过所有权系统和类型系统在编译期防止并发问题。以下是核心概念和 API 的极简总结:

1. 基础概念

  • 线程(Thread) 操作系统调度的最小执行单元,Rust 通过 std::thread 模块创建和管理。
  • 所有权规则不变 每个值仍只有一个所有者,但可通过 move 闭包或智能指针转移所有权到线程。

2. 创建线程

rust 复制代码
use std::thread; 
fn main() { 
    // 创建线程,返回 JoinHandle 
    let handle = thread::spawn(|| { println!("子线程运行中"); }); 
    // 主线程继续执行... 
    // 等待子线程结束 
    handle.join().unwrap(); 
} 

3. 线程间通信

通道(Channel)

多生产者单消费者(MPSC)模式:

rust 复制代码
use std::sync::mpsc; 
let (tx, rx) = mpsc::channel(); 
// 发送端可克隆(多生产者) 
let tx1 = tx.clone(); 
thread::spawn(move || { tx1.send("消息1").unwrap(); }); 
// 接收端阻塞等待 println!("收到: {}", rx.recv().unwrap()); 

4. 共享状态

互斥锁(Mutex)

rust 复制代码
use std::sync::{Mutex, Arc}; 
let data = Arc::new(Mutex::new(0)); // 原子引用计数 + 互斥锁 
// 在线程间克隆 Arc 
let data_clone = Arc::clone(&data); 
thread::spawn(move || { 
    let mut num = data_clone.lock().unwrap(); 
    *num += 1; // 自动释放锁 
}); 

读写锁(RwLock)

允许多读单写:

rust 复制代码
let lock = Arc::new(RwLock::new(0)); 
// 读锁(允许多个) 
let read = lock.read().unwrap(); 
// 写锁(独占) 
let mut write = lock.write().unwrap(); 

5. 原子操作

无锁并发,适用于计数器等场景:

rust 复制代码
use std::sync::atomic::{AtomicUsize, Ordering}; 
let counter = Arc::new(AtomicUsize::new(0)); 
// 原子加1 
counter.fetch_add(1, Ordering::SeqCst); 

6. 线程安全标记

Rust 通过以下两个自动实现的 trait 确保线程安全:

  • Send 类型可安全地在线程间转移所有权(如 i32, String)。
  • Sync 类型的引用可安全地在线程间共享(如 Mutex<T>)。

7. 常见模式

  1. 消息传递:用通道替代共享状态。
  2. 共享状态Arc<Mutex<T>>Arc<RwLock<T>>
  3. 无锁并发:原子类型(性能更高)。

总结 Rust 线程的核心优势:

  • 编译期安全:所有权和类型系统强制线程安全。
  • 零成本抽象:高性能,无需垃圾回收。
  • 死锁预防:通过 RAII 自动释放锁。
相关推荐
中国胖子风清扬2 小时前
Rust 序列化技术全解析:从基础到实战
开发语言·c++·spring boot·vscode·后端·中间件·rust
我就是全世界2 小时前
【存储选型终极指南】RustFS vs MinIO:5大维度深度对决,95%技术团队的选择秘密!
开发语言·分布式·rust·存储
Source.Liu5 小时前
【Python基础】 13 Rust 与 Python 注释对比笔记
开发语言·笔记·python·rust
Source.Liu9 小时前
【Python基础】 19 Rust 与 Python if 语句对比笔记
笔记·python·rust
Source.Liu10 小时前
【Python基础】 18 Rust 与 Python print 函数完整对比笔记
笔记·python·rust
学渣6765621 小时前
文件传输工具rsync|rust开发环境安装|Ascend实验相关命令
开发语言·后端·rust
咸甜适中1 天前
rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(二十四)窗口颜色、透明度、居中显示
笔记·学习·rust·egui
或与且与或非1 天前
Rust+slint实现一个登录demo
开发语言·rust·状态模式
BoredWait1 天前
rust 嵌入式esp23 《直流电机》
rust·嵌入式
l1t2 天前
DuckDB新版rusty_sheet 插件测试
xml·数据库·rust·插件·xlsx·duckdb