Rust8.2 Fearless Concurrency
Rust学习笔记
Rust编程语言入门教程课程笔记
参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community)
Lecture 16: Fearless Concurrency 无畏并发
src/main.rs
use std::thread;
use std::time::Duration;
use std::sync::mpsc;
use std::sync::{Mutex, Arc};fn main() {//Using Threads to Run Code Simultaneously//Creating a New Thread with spawnlet handle = thread::spawn(|| {for i in 1..10 {println!("hi number {} from the spawned thread!", i);thread::sleep(Duration::from_millis(1));}});for i in 1..5 {println!("hi number {} from the main thread!", i);thread::sleep(Duration::from_millis(1));}// output:// hi number 1 from the main thread!// hi number 1 from the spawned thread!// hi number 2 from the main thread!// hi number 2 from the spawned thread!// hi number 3 from the main thread!// hi number 3 from the spawned thread!// hi number 4 from the main thread!// hi number 4 from the spawned thread!//In this run, the main thread printed first, //even though the print statement from the spawned thread appears first in the code. //And even though we told the spawned thread to print until i is 9, //it only got to 5 before the main thread shut down.//Waiting for All Threads to Finish Using join Handleshandle.join().unwrap();let v = vec![1, 2, 3];let handle = thread::spawn(move || {println!("Here's a vector: {:?}", v);});//move closure: v is moved into the closure// drop(v); // oh no! v is moved into the threadhandle.join().unwrap();//Using Message Passing to Transfer Data Between Threadslet (tx, rx) = mpsc::channel();thread::spawn(move || {let val = String::from("hi");// tx.send(val).unwrap();tx.send(val).unwrap();// println!("val is {}", val); // error: value borrowed here after move});let received = rx.recv().unwrap();//recv blocks the main thread’s execution and waits until a value is sent down the channelprintln!("Got: {}", received);//try_recv: without blocking//Sending Multiple Values and Seeing the Receiver Waitinglet (tx, rx) = mpsc::channel();thread::spawn(move || {let vals = vec![String::from("hello"),String::from("from"),String::from("the"),String::from("thread"),];for val in vals {tx.send(val).unwrap();thread::sleep(Duration::from_secs(1));}});for received in rx {println!("Got: {}", received);}//Shared-State Concurrency//Mutexes: Mutual Exclusion//API: lock, unwrap, Mutex<T> (smart pointer)let m = Mutex::new(5);{let mut num = m.lock().unwrap();*num = 6;// println!("m is {}", m); // error: cannot be formatted with the default formatter}println!("m is {:?}", m);//Sharing a Mutex<T> Between Multiple Threadslet counter = Arc::new(Mutex::new(0));//Arc<T> is an atomically reference counted type//A: atomically, R: reference, C: counted//API in Arc is the same as in Rc let mut handles = vec![];for _ in 0..10 {let counter = Arc::clone(&counter);let handle = thread::spawn(move || {let mut num = counter.lock().unwrap();*num += 1;});handles.push(handle);}for handle in handles {handle.join().unwrap();}println!("Result: {}", *counter.lock().unwrap());//Result: 10//Extensible Concurrency with the Sync and Send Traits//Send: ownership can be transferred between threads//Sync: multiple threads can have references to the same value//Implementing Send and Sync Manually Is Unsafe
}
相关文章:
Rust8.2 Fearless Concurrency
Rust学习笔记 Rust编程语言入门教程课程笔记 参考教材: The Rust Programming Language (by Steve Klabnik and Carol Nichols, with contributions from the Rust Community) Lecture 16: Fearless Concurrency 无畏并发 src/main.rs use std::thread; use std::time::Du…...
合并两个有序链表(冒泡排序实现)
实例要求:将两个升序链表合并为一个新的 升序 链表并返回;新链表是通过拼接给定的两个链表的所有节点组成的;实例分析:先拼接两个链表,在使用冒泡排序即可;示例代码: struct ListNode* mergeTwo…...
【iOS】——知乎日报第五周总结
文章目录 一、评论区展开与收缩二、FMDB库实现本地持久化FMDB常用类:FMDB的简单使用: 三、点赞和收藏的持久化 一、评论区展开与收缩 有的评论没有被回复评论或者被回复评论过短,这时就不需要展开全文的按钮,所以首先计算被回复评…...
gRPC 四模式之 双向流RPC模式
双向流RPC模式 在双向流 RPC 模式中,客户端以消息流的形式发送请求到服务器端,服务器端也以消息流的形式进行响应。调用必须由客户端发起,但在此之后,通信完全基于 gRPC 客户端和服务器端的应用程序逻辑。 为什么有了双向流模式…...
五分钟,Docker安装kafka 3.5,kafka-map图形化管理工具
首先确保已经安装docker,如果是windows安装docker,可参考 wsl2安装docker 1、安装zk docker run -d --restartalways -e ALLOW_ANONYMOUS_LOGINyes --log-driver json-file --log-opt max-size100m --log-opt max-file2 --name zookeeper -p 2181:218…...
2023.11.18html中如何使用input/button进行网页跳转
2023.11.18html中如何使用input/button进行网页跳转 在做网页时有时会用元素,有时会用元素进行form表单操作或者网页跳转,但是用bootstrap时两种元素会出现不同的样式,为了样式一致,有时需要使用这两种元素相互实现其常用功能。 …...
java文件压缩加密,使用流的方式
使用net.lingala.zip4j来进行文件加密压缩。 添加依赖net.lingala.zip4j包依赖,这里使用的是最新的包2.11.5版本。 <dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>${zip4j.versi…...
月子会所信息展示服务预约小程序的作用是什么
传统线下门店经营只依赖自然流量咨询或简单的线上付费推广是比较低效的,属于靠“天”吃饭,如今的年轻人学历水平相对较高,接触的事物或接受的思想也更多更广,加之生活水平提升及互联网带来的长期知识赋能,因此在寻找/咨…...
Windows核心编程 静态库与动态库
资源文件 .rc 文件 会被 rc.exe 变成 .res 文件(二进制文件) 在链接时链接进入 .exe 文件 一、如何保护源码 程序编译链接过程 不想让别人拿到源代码,但是想让其使用功能,根据上图观察,把自己生成的obj给对方,对方拿到obj后&…...
【Spring Boot】如何自定义序列化以及反序列器
在我们使用默认的消息转换器,将java的Long类型通过json数据传输到前端JS时,会导致Long类型的精度丢失,这是因为JS处理Long类型数字只能精确到前16位,所以我们可以采用自定义序列化方式将Long类型数据统一转为String字符串…...
6 Redis的慢查询配置原理
1、redis的命令执行流程 redis的慢查询只针对步骤3 默认情况下,慢查询的阈值是10ms...
JAVA小游戏 “拼图”
第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 创建一个代码类 和一个运行类 代码如下: package heima; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import …...
Spring 配置
配置文件最主要的目的 : 解决硬编码的问题(代码写死) SpringBoot 的配置文件,有三种格式 1.properties 2.yaml 3.yml(是 yaml 的简写) SpringBoot 只支持三个文件 1.application.properties 2.application.yaml 3.application.yml yaml 和 yml 是一样的,学会一个就行…...
全新酷盒9.0源码:多功能工具箱软件的最新iapp解决方案
全能工具箱软件酷盒:源码提供iapp解决方案,自定义打造个性化体验 酷盒是一款功能丰富的工具箱软件,内置众多实用功能,并实时更新热门功能。该软件还拥有丰富的资源库,用户可以在线畅玩游戏、免费下载音乐等。 我们提…...
aspose.cells java合并多个excel
背景 有需求需要把多个excel合并到一个excel文件里面,之前一直都是用python来处理办公自动化的东西,但是这个需求用python的openxyl库处理基本只能合并数据,样式没办法一比一合并过去,找了很多解决方案都没法实现,所以…...
【每日一题】三个无重叠子数组的最大和
文章目录 Tag题目来源题目解读解题思路方法一:滑动窗口 写在最后 Tag 【滑动窗口】【数组】【2023-11-19】 题目来源 689. 三个无重叠子数组的最大和 题目解读 解题思路 方法一:滑动窗口 单个子数组的最大和 我们先来考虑一个长度为 k 的子数组的最…...
react之基于@reduxjs/toolkit使用react-redux
react之基于reduxjs/toolkit使用react-redux 一、配置基础环境二、使用React Toolkit 创建 counterStore三、为React注入store四、React组件使用store中的数据五、实现效果六、提交action传递参数七、异步状态操作 一、配置基础环境 1.使用cra快速创建一个react项目 npx crea…...
基于51单片机水位监测控制报警仿真设计( proteus仿真+程序+设计报告+讲解视频)
这里写目录标题 💥1. 主要功能:💥2. 讲解视频:💥3. 仿真💥4. 程序代码💥5. 设计报告💥6. 设计资料内容清单&&下载链接💥[资料下载链接:](https://doc…...
git基本用法和操作
文章目录 创建版本库方式:Git常用操作命令:远程仓库相关命令分支(branch)操作相关命令版本(tag)操作相关命令子模块(submodule)相关操作命令忽略一些文件、文件夹不提交其他常用命令 创建版本库方式: 创建文件夹 在目录下 右键 Git Bush H…...
设计模式-组合模式-笔记
“数据结构”模式 常常有一些组件在内部具有特定的数据结构,如果让客户程序依赖这些特定数据结构,将极大地破坏组件的复用。这时候,将这些特定数据结构封装在内部,在外部提供统一的接口,来实现与特定数据结构无关的访…...
微信M4A文件打不开怎么办?m4a转MP3只需一招,小白也能操作
很多人会遇到这种情况:别人通过微信发来一段录音、会议音频、课程音频或者采访素材,文件后缀是.m4a,在微信里可能能播放,但保存到手机本地、发到电脑、导入剪辑软件或者复制到U盘后,就可能出现打不开、无法识别、格式不…...
DeepSeek流式响应提速73%的底层逻辑:从Token缓冲区到GPU显存调度的全链路拆解
更多请点击: https://kaifayun.com 第一章:DeepSeek流式响应提速73%的工程现象与性能基线 在真实生产环境中对 DeepSeek-R1 模型实施流式响应优化后,端到端首 token 延迟(Time to First Token, TTFT)从平均 482ms 降至…...
当数字笔记遇上开源力量:Xournal++如何重新定义你的创作边界
当数字笔记遇上开源力量:Xournal如何重新定义你的创作边界 【免费下载链接】xournalpp Xournal is a handwriting notetaking software with PDF annotation support. Written in C with GTK3, supporting Linux (e.g. Ubuntu, Debian, Arch, SUSE), macOS and Wind…...
灾变瞬间生成人员分布图,为抢险决策提供可靠依据 ——视频孪生智能态势研判矿山抢险决策技术方案
灾变瞬间生成人员分布图,为抢险决策提供可靠依据——视频孪生智能态势研判矿山抢险决策技术方案一、方案引言煤矿井下瓦斯爆炸、顶板垮塌、透水突涌等灾害具备瞬时爆发、连锁破坏、环境骤变的典型特征。险情发生短短数分钟内,巷道结构受损变形、供电通信…...
Taotoken提供的官方价折扣与活动价在长期使用中的成本优势感知
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 Taotoken提供的官方价折扣与活动价在长期使用中的成本优势感知 1. 成本可预测性的起点:透明的按Token计费 对于需要长…...
如何让Axure RP显示中文:三分钟搞定界面本地化
如何让Axure RP显示中文:三分钟搞定界面本地化 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文…...
使用 Node.js 和 Taotoken 为博客网站快速搭建一个智能内容摘要生成接口
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用 Node.js 和 Taotoken 为博客网站快速搭建一个智能内容摘要生成接口 对于个人博客站长而言,为篇幅较长的文章提供一…...
公平AI研究的组织协调困境:从技术理想走向工程实践
1. 公平AI研究的十字路口:当技术理想遭遇组织现实如果你最近几年关注过人工智能的新闻,大概率会看到这样的标题:“某招聘算法被曝歧视女性”、“某医疗AI系统对少数族裔诊断准确率显著偏低”。这些并非科幻小说的情节,而是算法偏见…...
【紧急预警】DeepSeek v2.3.1已确认存在默认策略绕过漏洞——立即核查你的access_control.yaml配置(附热补丁)
更多请点击: https://intelliparadigm.com 第一章:DeepSeek访问控制配置 DeepSeek模型服务在企业级部署中需严格遵循最小权限原则,访问控制配置是保障API调用安全与资源隔离的核心环节。DeepSeek官方SDK及OpenAPI网关均支持基于Token的细粒度…...
如何用QrazyBox修复损坏的二维码:终极修复工具指南
如何用QrazyBox修复损坏的二维码:终极修复工具指南 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾遇到过打印模糊、水渍污染或屏幕划痕导致的二维码无法扫描?…...
