Rust修仙之道 第十三章 并行境 · 多线程、共享与消息灵道

第十三章:并行境 · 多线程、共享与消息灵道

"术者一身不可至万处,分灵影可并行化心。"

顾行云于静室冥修,心观符阵延迟,渐悟:"纵术法再快,若不能并行,终受瓶颈所限。"

他毅然踏入并行殿,学习 Rust 修真界最安全的"多线程术"。

一、灵影分身术 · thread::spawn()

最初的并发术式,乃是将灵气复制为影:

rust 复制代码
use std::thread;

fn main() {
    let handle = thread::spawn(|| {
        println!("🌪 分身执行灵术!");
    });
    println!("🧙 本体继续修炼");
    handle.join().unwrap(); // 等待分身结束
}

分身 spawn() 生成后可独立运转,join() 阶段合体归一。

二、共享灵枢 · Arc<T>(原灵复刻术)

若多个分身需访问同一份灵术卷轴,该如何控制所有权?

rust 复制代码
use std::sync::Arc;
let scroll = Arc::new(String::from("风刃卷轴"));

for _ in 0..3 {
    let s = Arc::clone(&scroll);
    thread::spawn(move || {
        println!("👤 分身施展:{}", s);
    });
}

Arc<T>原灵复刻容器,共享所有权、只读稳定,但不可变更。

三、互斥之印 · Mutex<T>(共享可变封印)

若多个分身还需修改灵力?此时需加封"互斥印":

rust 复制代码
use std::sync::{Mutex, Arc};

let mana = Arc::new(Mutex::new(100));

for _ in 0..4 {
    let m = Arc::clone(&mana);
    thread::spawn(move || {
        let mut mana_pool = m.lock().unwrap();
        *mana_pool += 10;
    });
}
  • Mutex::new(value) 创建封印灵池;

  • .lock().unwrap() 打开封印、取得灵气所有权;

  • Arc 包裹共享引用,避免灵权争夺。

顾行云自创口诀:"共享不争者为 Arc;共改需封者用 Mutex。"

四、通灵信道 · mpsc::channel()(灵意传讯术)

除了共享,分身还可通过"信道"传递意念:

rust 复制代码
use std::sync::mpsc;
use std::thread;

let (tx, rx) = mpsc::channel();

thread::spawn(move || {
    tx.send("🌩 任务完成!").unwrap();
});

let received = rx.recv().unwrap();
println!("主术士收到:{}", received);
  • channel() 创建信道双口:发出端 tx,接收端 rx

  • 可用于多源汇集、任务分发、事件驱动等多灵协作法。

灵术术式对比总结

技术术式 功效 用途
thread::spawn() 创建灵影任务 异步执行子任务
Arc<T> 多分身共享灵气 多线程共享只读数据
Mutex<T> 灵气封印池 多线程共享可变数据
channel() 灵意传讯术 跨线程通讯 / 事件驱动

并发心诀 · 分身之理

术不再身施,而在并行调度;控共改之界,避冲突之灾,方为上乘"灵影之术"。


⬅️ 上一章            [下一章 待续➡️]