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 panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言并发之通知退出机制的实现

《Go语言并发之通知退出机制的实现》本文主要介绍了Go语言并发之通知退出机制的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1、通知退出机制1.1 进程/main函数退出1.2 通过channel退出1.3 通过cont

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据

安装centos8设置基础软件仓库时出错的解决方案

《安装centos8设置基础软件仓库时出错的解决方案》:本文主要介绍安装centos8设置基础软件仓库时出错的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录安装Centos8设置基础软件仓库时出错版本 8版本 8.2.200android4版本 javas

Linux基础命令@grep、wc、管道符的使用详解

《Linux基础命令@grep、wc、管道符的使用详解》:本文主要介绍Linux基础命令@grep、wc、管道符的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录grep概念语法作用演示一演示二演示三,带选项 -nwc概念语法作用wc,不带选项-c,统计字节数-

python多线程并发测试过程

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