Rust修仙之道 第十三章 并行境 · 多线程、共享与消息灵道
第十三章:并行境 · 多线程、共享与消息灵道
“术者一身不可至万处,分灵影可并行化心。”
顾行云于静室冥修,心观符阵延迟,渐悟:“纵术法再快,若不能并行,终受瓶颈所限。”
他毅然踏入并行殿,学习 Rust 修真界最安全的“多线程术”。
一、灵影分身术 · thread::spawn()
最初的并发术式,乃是将灵气复制为影:
use std::thread;
fn main() {
let handle = thread::spawn(|| {
println!(" 分身执行灵术!");
});
println!(" 本体继续修炼");
handle.join().unwrap(); // 等待分身结束
}
分身
spawn()生成后可独立运转,join()阶段合体归一。
二、共享灵枢 · Arc<T>(原灵复刻术)
若多个分身需访问同一份灵术卷轴,该如何控制所有权?
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>(共享可变封印)
若多个分身还需修改灵力?此时需加封“互斥印”:
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()(灵意传讯术)
除了共享,分身还可通过“信道”传递意念:
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() |
灵意传讯术 | 跨线程通讯 / 事件驱动 |
并发心诀 · 分身之理
术不再身施,而在并行调度;控共改之界,避冲突之灾,方为上乘“灵影之术”。
Rust修仙之道 第十三章 并行境 · 多线程、共享与消息灵道的更多相关文章
- 从零搭建Golang开发环境--go修仙序章
1. 什么是go语言 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态 .强类型.编译型语言 .Go 语 ...
- 走进shiro,构建安全的应用程序---shiro修仙序章
0. 写在前面 在最近的一个项目当中,我们基于Shiro实现我们系统的认证和授权.借此机会,写几篇博客,总结一下在本次实践当中遇到的问题,和较全面地学习一下Shiro的知识点, 1. 权限管理 权限管 ...
- PMBOK(第六版) PMP笔记——《十三》第十三章(项目干系人管理)
PMBOK(第六版) PMP笔记——<十三>第十三章(项目干系人管理) 第十三章 项目干系人管理: 了解干系人的需要和期望.解决实际发生的问题.管理利益冲突.促进干系人合理参与 项目决策和 ...
- PRML读书会第十三章 Sequential Data(Hidden Markov Models,HMM)
主讲人 张巍 (新浪微博: @张巍_ISCAS) 软件所-张巍<zh3f@qq.com> 19:01:27 我们开始吧,十三章是关于序列数据,现实中很多数据是有前后关系的,例如语音或者DN ...
- <构建之法>第十三章到十七章有感以及这个项目读后感
<构建之法>第十三章到十七章有感 第13章:软件测试方法有哪些? 主要讲了软件测试方法:要说有什么问题就是哪种效率最高? 第14章:质量保障 软件的质量指标是什么?怎么样能够提升软件的质量 ...
- 《Linux命令行与shell脚本编程大全》 第二十三章 学习笔记
第二十三章:使用数据库 MySQL数据库 MySQL客户端界面 mysql命令行参数 参数 描述 -A 禁用自动重新生成哈希表 -b 禁用 出错后的beep声 -B 不使用历史文件 -C 压缩客户端和 ...
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
- Gradle 1.12 翻译——第十三章 编写构建脚本
有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...
- [汇编学习笔记][第十三章int指令]
第十三章int指令 13.1 int指令 格式: int n, n 为中断类型码 可以用int指令调用任何一个中断的中断处理程序(简称中断例程). 13.4 BIOS和DOS 所提供的中断例程 BIO ...
- perl5 第十三章 Perl的面向对象编程
第十三章 Perl的面向对象编程 by flamephoenix 一.模块简介二.Perl中的类三.创建类四.构造函数 实例变量 五.方法六.方法的输出七.方法的调用八.重载九.析构函数十.继承十一. ...
随机推荐
- .net WorkFlow 流程转办
WikeFlow官网:www.wikesoft.com WikeFlow学习版演示地址:workflow.wikesoft.com WikeFlow学习版源代码下载:https://gitee.com ...
- 画个Shape留意到的东西
这几个知识点 在 CoreGraphics 框架中有这样一个方法: public func addArc(center: CGPoint, radius: CGFloat, startAngle: C ...
- javaweb基础之HTTP、Request、Response、ServletContext
一.http协议是一个重要的协议,他是贯穿整合B/S架构的核心协议.因此学习http协议的时候一定要从请求和响应两个角度思考.注意方向性(请求:浏览器->服务器:响应:服务器->浏览器) ...
- 2025dsfzB层考试总结
2025年东师附中B层春季测试1考试总结 Designed By Lwj54joy AT 2025-03-01 本文将遵守GNU GPL2.0开源协议. 概述 总分:\(310/400\) 改题分数: ...
- 一个清除数组的方法在 Kotlin、Java、C#和Nim上的性能测试
起因 我的一个项目使用 Kotlin 编写,他是一个多维数据库应用程序,所以会非常频繁的操作 int 数组,其中有段程序就需要进行 几亿次的数组清除动作,类似这样的代码: Arrays.fill(ta ...
- svg标签元素定位最有效的办法
随着前端技术发展,svg(可伸缩矢量图形 )在前端应用中广泛被使用,然而采用传统的xpath元素定位方法已经无法对其进行定位,我们需要将svg标签及其包含的子标签用以下方式表达: *[name()=& ...
- 集合流之“anyMatch”的应用【返回boolean类型】
判断集合中是否存在"字符串",返回boolean类型 boolean isExit = allSku.stream().map(Product::getFeatureList) . ...
- c# 批量注入示例代码
using Microsoft.Extensions.DependencyInjection; using System; using System.Linq; using System.Reflec ...
- Excel 拼接为 SQL 并打包 exe
关于 Excel 拼接 sql 这个操作, 我已经整过好几篇了, 当然在工作中也是蛮常用的, 今天主要是来写个终篇, 彻底结束它, 然后将代码进行打包为 exe 这样的桌面小软件, 除了自己用, 也可 ...
- Python基础 - 字符串处理
引入 平时工作中, 80% 时间都在跟字符串打交道, 字符串的处理,是编程语言中, 尤其重要的. Python 变得比较流行, 一个大原因, 用 Pandas 的第一作者的话说, 大概是 Python ...