第十三章:并行境 · 多线程、共享与消息灵道
"术者一身不可至万处,分灵影可并行化心。"
顾行云于静室冥修,心观符阵延迟,渐悟:"纵术法再快,若不能并行,终受瓶颈所限。"
他毅然踏入并行殿,学习 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() |
灵意传讯术 | 跨线程通讯 / 事件驱动 |
并发心诀 · 分身之理
术不再身施,而在并行调度;控共改之界,避冲突之灾,方为上乘"灵影之术"。