Rust基础拾遗--并发和异步编程

Rust基础拾遗

  • 前言
  • 1.并发
  • 2.异步编程


前言

   通过Rust程序设计-第二版笔记的形式对Rust相关重点知识进行汇总,读者通读此系列文章就可以轻松的把该语言基础捡起来。


1.并发

  1. 为什么一些看似正确的多线程惯用法却根本不起作用?
    与“内存模型”有关

  2. 你最终会找到一种自己用起来顺手且不会经常出错的并发惯用法。

  3. 系统程序员常用的方法包括以下几种。

  • 具有单一作业的后台线程,需要定期唤醒执行作业。

  • 通过任务队列与客户端通信的通用工作池。

  • 管道,数据在其中从一个线程流向下一个线程,每个线程只负责一部分工作。

  • 数据并行处理,假设整个计算机只进行一次主要的大型计算,将这次计算分成 n 个部分且在 n 个线程上运行,并期望机器的所有 n 个核心都能立即开始工作。

  • 同步复杂对象关系,其中多个线程可以访问相同的数据,并且使用基于互斥锁等底层原语的临时加锁方案避免了竞争。

  • 原子化整数操作允许多个核心借助一个机器字大小的字段传递信息来进行通信。(数据通常是指针)

  1. Rust的3种 线程的方法。
  • 分叉与合并(fork-join)并行
  • 通道
  • 共享可变状态

1.1 分叉与合并并行
1.1.1 启动与联结
1.1.2 跨线程错误处理
1.1.3 跨线程共享不可变数据
1.1.4 rayon
1.1.5 重温曼德博集
1.2 通道
1.2.1 发送值
1.2.2 接收值
1.2.3 运行管道
1.2.4 通道的特性与性能
1.2.5 线程*:Send与Sync
1.2.6 绝大多数迭代器能通过管道传给通道
1.2.7 除管道之外的用法
1.3 共享可变状态
1.3.1 什么是互斥锁
1.3.2 Mutex
1.3.3 mut与互斥锁
1.3.4 为什么互斥锁不是“银弹”
1.3.5 死锁
1.3.6 “中毒”的互斥锁
1.3.7 使用互斥锁的多消费者通道
1.3.8 读/写锁(RwLock )
1.3.9 条件变量(Condvar)
1.3.10 原子化类型
1.3.11 全局变量

2.异步编程

2.1.1 Future
2.1.2 异步函数与await表达式
2.1.3 从同步代码调用异步函数:block_on
2.1.4 启动异步任务
2.1.5 异步块
2.1.6 从异步块构建异步函数
2.1.7 在线程池中启动异步任务
2.1.8 你的Future实现Send了吗
2.1.9 长时间运行的计算:yield_now与spawn_blocking
2.1.10 对几种异步设计进行比较
2.1.11 一个真正的异步HTTP客户端
2.2 异步客户端与服务器
2.2.1 Error类型与Result类型
2.2.2 协议
2.2.3 获取用户输入:异步流
2.2.4 发送数据包
2.2.5 接收数据包:更多异步流

2.2.6 客户端的main函数
2.2.7 服务器的main函数
2.2.8 处理聊天连接:异步互斥锁
2.2.9 群组表:同步互斥锁
2.2.10 聊天组:tokio的广播通道
2.3 原始Future与执行器:Future什么时候值得再次轮询
2.3.1 调用唤醒器:spawn_blocking
2.3.2 实现block_on
2.4 固定(Pin)
2.4.1 Future生命周期的两个阶段
2.4.2 固定指针
2.4.3 Unpin特型
2.5 什么时候要用异步代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/683005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python循环语句——for循环的嵌套使用

一、引言 在Python编程中,循环是控制程序流程的重要工具,它允许我们重复执行某段代码,直到满足特定的条件为止。其中,for循环是Python中最常用的循环类型之一。而嵌套循环,即在一个循环内部再嵌套另一个循环&#xff…

c++游戏服务器开发

本篇文章我们来介绍C高性能服务器的开发 1.用户认证和鉴权 JWT认证 1.前后端token的认证流程: 前端发送登陆请求 – > 后端登陆接口接受 -->后端数据处理后返给前端token –> 前端将token存储后 -->每次请求都带着这问 —>后端设置jwto截器 -->…

政安晨:梯度与导数~示例演绎《机器学习·神经网络》的高阶理解

这篇文章确实需要一定的数学基础,第一次接触的小伙伴可以先看一下我示例演绎这个主题的前两篇文章: 示例演绎机器学习中(深度学习)神经网络的数学基础——快速理解核心概念(一): 政安晨&#…

蓝桥杯嵌入式学习记录——按键的使用

目录 一、按键原理简介 二、cubeMX的配置 三、按键的短按代码 四、按键的长按代码 一、按键原理简介 在STM32中,按键连接通常使用GPIO(通用输入/输出)端口来实现。当按键未被按下时,GPIO端口处于高电平状态(即1&am…

springboot188基于spring boot的校园商铺管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

高德地图上绘制热力图的方法

百度地图和高德地图的JavaScript API都提供了热力图的绘制方法,都是将热力图作为新的图层,叠加到地图上。但是百度地图的经纬度体系与我们的经纬度存在偏差,高德的与我们相符,应当使用高德地图JavaScript API。 因为是JavaScript…

COM初体验——新建文档并写入内容。

我想在程序里和Word交互。老师跟我说不要学COM,因为它已经过时了。但是我不想再把代码移植到C#上面,然后用VSTO——已经用了std::unordered_set!因为我使用了Copilot,结合我的思考,写了下面的代码: #impor…

【Langchain Agent研究】SalesGPT项目介绍(四)

【Langchain Agent研究】SalesGPT项目介绍(三)-CSDN博客 github地址:GitHub - jerry1900/SalesGPT: Context-aware AI Sales Agent to automate sales outreach. 上节课,我们主要介绍了SalesGPT的类属性和它最重要的类方法f…

【教学类-47-01】20240206UIBOT+IDM下载儿童古诗+修改文件名

背景需求: 去年12月,我去了其他幼儿园参观,这是一个传统文化德育教育特色的学校,在“古典集市”展示活动中,小班中班大班孩子共同现场念诵《元日》《静夜思》包含了演唱版本和儿歌念诵版本。 我马上也要当班主任了&a…

微信小程序开发学习笔记《17》uni-app框架-tabBar

微信小程序开发学习笔记《17》uni-app框架-tabBar 博主正在学习微信小程序开发,希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、创建tabBar分支 运行如下的命令,基于master分支在本地创建tabBar子分支&#x…

蓝桥杯刷题--python-5

0天干地支 - 蓝桥云课 (lanqiao.cn) import os import sys # 请在此输入您的代码 I1=[jia,yi,bing,ding,wu,ji,geng,xin,ren,gui] I2=[zi,chou,yin,mao,chen,si,wu,wei,shen,you,xu,hai] n=int(input()) n_=n-1900 n_=n_%60 i1=(n_+6)%10 i2=(n_) %12 print(.join(I1[i1]+I2[i2…

Netty Review - 服务端channel注册流程源码解析

文章目录 PreNetty主从Reactor线程模型服务端channel注册流程源码解读入口 serverBootstrap.bind(port)执行队列中的任务 : AbstractUnsafe#register0注册 doRegister() 源码流程图 Pre Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketCh…

Vue2源码梳理:关于vm.$mount的实现

$mount vue实例挂载的实现,也就是执行 vm.$mount 的方法 在 Runtime Compiler 版本,入口文件是: src/platform/web/entry-runtime-with-compiler.js $mount 方法也是在这个文件中被定义的 const mount Vue.prototype.$mount Vue.prototype.$mount f…

acszcda

学习目标: 提示:这里可以添加学习目标 例如: 一周掌握 Java 入门知识 学习内容: 提示:这里可以添加要学的内容 例如: 搭建 Java 开发环境掌握 Java 基本语法掌握条件语句掌握循环语句 学习时间&#x…

C# 使用Naudio库实现声卡采集麦克风采集+混音

C# 使用Naudio库实现声卡采集麦克风采集混音 using NAudio.Wave; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threadin…

TCP高频知识点

本篇文章主要讲述一下在面试过程中TCP的高频知识点 1.TCP三次握手流程图: 客户端发送一个SYN(同步)报文段给服务器,选择一个初始序列号,并设置SYN标志位为1。服务器接收到客户端的SYN报文段后,回复一个ACK&#xff08…

OJ刷题:杨氏矩阵【建议收藏】

看见这个题目&#xff0c;很多人的第一反应是遍历整个数组查找数字&#xff0c;但是这种方法不仅效率低&#xff0c;而且远远不能满足题目要求。下面介绍一种高效的查找方法&#xff1a; 代码实现&#xff1a; #include <stdio.h>int Yang_Find_Num(int arr[][3], int …

steam游戏搬砖项目靠谱吗?有没有风险?

作为一款fps射击游戏&#xff0c;csgo在近几年可谓是火出圈&#xff0c;作为一款全球竞技游戏&#xff0c;深受玩家喜爱追捧&#xff0c;玩家追求的就是公平公正&#xff0c;各凭本事&#xff0c;像其他游戏可能还会有皮肤等装备属性加成&#xff0c;在csgo里面是不存在的。 纯…

K8sGPT 的使用

K8sGPT 介绍 k8sgpt 是一个扫描 Kubernetes 集群、诊断和分类问题的工具。它将 SRE 经验编入其分析器中&#xff0c;并帮助提取最相关的信息&#xff0c;通过人工智能来丰富它。它还可以与 OpenAI、Azure、Cohere、Amazon Bedrock 和本地模型结合使用。 K8sGPT Github 地址 …

C++Linux网络编程:简单的select模型运用

文章目录 前言源代码部分重点解读read/write与recv/send在使用上的差异 前言 这段代码来自于游双的《Linux高性能服务器编程》&#xff0c;在Ubuntu中对代码进行了实现&#xff0c;并在注释部分加上了我的个人解读。 源代码 // #include <sys/types.h> // 网络通讯的核…