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

2024-02-15 23:28

本文主要是介绍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 什么时候要用异步代码

这篇关于Rust基础拾遗--并发和异步编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

Spring Boot集成SLF4j从基础到高级实践(最新推荐)

《SpringBoot集成SLF4j从基础到高级实践(最新推荐)》SLF4j(SimpleLoggingFacadeforJava)是一个日志门面(Facade),不是具体的日志实现,这篇文章主要介... 目录一、日志框架概述与SLF4j简介1.1 为什么需要日志框架1.2 主流日志框架对比1.3 SLF4

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

rust 中的 EBNF简介举例

《rust中的EBNF简介举例》:本文主要介绍rust中的EBNF简介举例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 什么是 EBNF?2. 核心概念3. EBNF 语法符号详解4. 如何阅读 EBNF 规则5. 示例示例 1:简单的电子邮件地址

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构