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

相关文章

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Java JUC并发集合详解之线程安全容器完全攻略

《JavaJUC并发集合详解之线程安全容器完全攻略》Java通过java.util.concurrent(JUC)包提供了一整套线程安全的并发容器,它们不仅是简单的同步包装,更是基于精妙并发算法构建... 目录一、为什么需要JUC并发集合?二、核心并发集合分类与详解三、选型指南:如何选择合适的并发容器?在多

Java 结构化并发Structured Concurrency实践举例

《Java结构化并发StructuredConcurrency实践举例》Java21结构化并发通过作用域和任务句柄统一管理并发生命周期,解决线程泄漏与任务追踪问题,提升代码安全性和可观测性,其核心... 目录一、结构化并发的核心概念与设计目标二、结构化并发的核心组件(一)作用域(Scopes)(二)任务句柄

Rust 智能指针的使用详解

《Rust智能指针的使用详解》Rust智能指针是内存管理核心工具,本文就来详细的介绍一下Rust智能指针(Box、Rc、RefCell、Arc、Mutex、RwLock、Weak)的原理与使用场景,... 目录一、www.chinasem.cnRust 智能指针详解1、Box<T>:堆内存分配2、Rc<T>:

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

从基础到高级详解Python数值格式化输出的完全指南

《从基础到高级详解Python数值格式化输出的完全指南》在数据分析、金融计算和科学报告领域,数值格式化是提升可读性和专业性的关键技术,本文将深入解析Python中数值格式化输出的相关方法,感兴趣的小伙... 目录引言:数值格式化的核心价值一、基础格式化方法1.1 三种核心格式化方式对比1.2 基础格式化示例