Rust Async 异步编程(十一):Async 生态

Rust 基于 await、async 的异步编程和纤程、协程的实现 它使得在 Rust 中编写异步代码变得更加简单和直观,通过结合 async/await 语法,你可以编写出清晰易读的异步代码,提高程序的并发性能和响应能力。这意味着虽然异步操作本身不会启动新线程,但它们可以在现有的线程池中的线程上执行,从而实现高效的并发处理。async 关键字用于声明一个函数是异步的,这意味着该函数可以包含挂起执行的操作(如网络请求或文件读写),而不会阻塞整个程序的执行。异步操作的执行是由运行时库(如Tokio)管理的,它们可能会在线程池中的线程上调度这些操作,以实现高效的并发处理。 阅读详情

Rust Async 异步编程(十一):Async 生态

Rust 目前只提供编写 async 代码的基本要素,标准库中尚未提供执行器、任务、反应器、组合器以及低级 I/O Future 和 trait。

社区提供的 async 生态系统填补了这些空白。

Async Runtime

Async 运行时是用于执行 async 应用程序的库。

它通常将一个反应器和一个或多个执行器绑定在一起。

  • 反应器为异步 I/O、进程间通信和计时器等外部事件提供订阅机制。在 Async 运行时中,订阅者通常是代表低级别 I/O 操作的 Future。
  • 执行器负责安排和执行任务。它们跟踪正在运行和暂停的任务,对 Future 进行 poll 直到完成,并在任务能够取得进展时唤醒任务。

执行器一词经常与运行时互换使用。

我们用生态系统一词来描述一个与兼容 trait 和特性捆绑在一起的运行时。

社区提供的 async crates

futures crate:提供了 Stream、Sink、AsyncRead、AsyncWrite 等 trait,以及组合器等工具。

这些可能最终成为标准库的一部分。

futures 有自己的执行器,但没有自己的反应器,因此它不支持 async I/O 或计时器 Future 的执行。因此,futures 不被认为是一个完整的运行时。

常见的选择是:与另一个 crate 中的执行器一起使用来自 futures 提供的工具。

流行的运行时

  • tokio:一个流行的 async 生态系统,包含 HTTP、gRPC 和跟踪框架
  • async-std:提供标准库的 async 副本
  • smol:小型、简化的 async 运行时,提供可用于包装 UnixStream 或 TcpListener 等结构的 async trait
  • fuchsia-async:用于 Fuchsia OS 的执行器

确定生态兼容性

与 async I/O、计时器、进程间通信或任务交互的 async 代码通常取决于特定的异步执行器或反应器。

所有其他 async 代码,如异步表达式、组合器、同步类型和流,通常与生态系统无关,前提是任何嵌套的 Future 也与生态系统无关。

在开始一个项目之前, 建议研究相关的 async 框架和库,以确保与你选择的运行时以及彼此之间的兼容性。

单线程 vs 多线程执行器

async 执行器可以是单线程或多线程的。

多线程执行器可以在多个任务上同时取得进展,对于有许多任务的工作负载,它可以大大加快执行速度,但在任务之间同步数据通常更昂贵。

在单线程运行时和多线程运行时之间进行选择时,建议测量应用程序的性能。

任务可以在创建它们的线程上运行,也可以在单独的线程上运行。

异步运行时通常提供将任务生成到单独线程的功能。即使任务在不同的线程上执行,它们也应该是非阻塞的。

为了在多线程执行器上调度任务,它们必须是 Send 的。

一些运行时提供了生成非 Send 的任务的函数,确保每个任务都在生成它的线程上执行。它们还可以提供将阻塞任务生成到专用线程的函数,这对于运行来自其他库的阻塞同步代码非常有用。

参考

  1. https://github.com/rustcn-org/async-book
  2. https://www.bilibili.com/video/BV1Ki4y1C7gj
【Rust异步编程】Rust异步编程原理解析、标准库实现与第三方库实现详解 异步编程是一种允许程序在等待某些操作(如I/O)完成时继续执行其他任务的编程范式。与传统的同步编程相比,异步编程可以显著提高程序的吞吐量和资源利用率。 在Rust中,异步编程具有以下特点: 非阻塞执行:任务可以在等待时让出控制权 轻量级:异步任务(称为future)比线程更轻量 显式标记:使用async/await语法明确标识异步代码 阅读详情

相关推荐

博途 V15.1安装步骤

温馨提醒:安装此软件电脑配置至少应满足以下要求 处理器 CoreTM i5-3320M 3.3 GHz 或相当 内存 至少8G 硬盘 300 GB SSD 显示器 15.6' 宽屏显示 (1920 x 1080) 1.双击打开【Siemens v15.1】文件夹。 2.鼠标右击【STEP 7 BasicProfess...

谢谢关注“小鱼教你模数电”,各平台同号 9万+

【Rust异步】async和await异步编程实战:高并发任务处理全解析

async 和 await 是 Rust 中用于异步编程的关键字。 async 用于定义异步函数,表示函数体中包含异步代码。 await 用于等待异步操作完成,并返回异步操作的结果。 • 异步函数使用 async 关键字定义,并返回实现了 Future Trait 的类型。 异步函数可以在其他异步函数中使用 await 关键字等待异步操作完成。 调用异步函数时,会返回一个实现了 Future Trait 的对象,可以通过调用.await 方法等待结果。

景天科技苑 2万+

PWM控制技术+Simulink仿真详解

想要理解SVPWM控制技术,首先要了解PWM控制技术。 PWM控制技术就是对脉冲宽度进行调制的技术,通过对一系列脉冲宽度进行调制来等效获得所需要的波形(包括形状和幅值)。 PWM控制的基本原理:冲量(窄脉冲的面积)相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果(输出响应波形)基本相同,即面积等效原理;用一系列幅值相等,宽度按一定规律变化的高频脉冲序列代替期望的输出波形,多用于逆变电路的控制; PWM信号生成的方法有:计算法、调制法、跟踪法,主要对调制法进行详解 ...

小师兄的学习记录 5万+

Rust Async 异步编程(一):入门

Rust Async 异步编程(一):入门

ProgramNovice的博客 1388

Python | 处理CMIP6 NC数据,以tas为例

各位同学,一般在文章最后一章我们可能会做不同气候情景下变量的未来时空变化特征,类似上图。从cmip6下载的nc数据常需要转换格式、裁剪到研究区和重采样等,本期代码可以解决这类问题。

qq_48539301的博客 1384

VS2019编译使用log4cplus 1.2.0

logger.properties 文件。第三步,创建项目来测试,配置库。第二步,使用VS2019编译。

h a 6 6 6 c k 为 你解决复杂难题! 529

Rust异步编程 Async Await 入门

要了解什么是异步代码,我们首先来谈谈同步代码。println!println!上述语句按照明确的顺序执行,从上到下一个接一个地执行。” 打印,然后读取并打印Cargo.toml的内容。这种模式在正常操作下非常好 - 但有时代码需要在当前上下文在等待其他内容时暂停 - 这通常称为阻塞。换句话说,当一段代码被阻塞时,它实际上处于暂停状态,等待特定操作完成才能继续。例如,当等待文件系统、网络通信、数据库事务甚至一段时间过去时,就会发生这种情况。在此阻塞状态期间,程序保持空闲状态,无法同时执行其他任务。

xuejianxinokok的专栏 1657

MounRiver Studio(MRS)使用技巧:添加头文件目录;增加代码分组

MounRiver Studio(MRS)使用技巧:添加头文件目录

cheng___yi的博客 1812

Rust 异步编程详解(async/await)

Rust异步编程通过async/await语法和Future trait实现高效I/O处理,核心机制包括状态机模型和运行时调度。文章详细解析了异步编程基础、核心组件(Future trait、async/await语法)、工作流程,并提供了HTTP请求等代码示例。同时探讨了错误处理、任务取消、Pin/Unpin等高级话题,比较了不同运行时的适用场景。最佳实践建议选择合适运行时、避免阻塞操作,并指出异步编程在性能和安全方面的优势,以及调试复杂度等限制。附带的并发网络请求示例展示了tokio运行时的实际应用,包

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 2224

【存算一体架构实战】四、突破编译壁垒:手把手实现AI模型到存算硬件的自动映射

摘要:存算一体硬件的性能优势难以充分释放,核心瓶颈在于传统编译器无法高效适配"计算-存储融合"的新型架构。本文系统剖析传统编译流程在存算硬件上的三大痛点:数据布局不匹配导致90%带宽浪费、算子映射效率低使硬件利用率不足30%、缺乏专用优化_pass导致延迟居高不下。通过构建MLIR-PIM编译框架,实现从AI模型到存算硬件的全自动化映射,核心流程包括:TensorFlow模型→MLIR Dialect转换→存算优化_pass→硬件指令生成。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 243

FISCO BCOS(八)——— 一键部署 WeBase

环境 版本 Java Oracle JDK 8 至 14 MySQL MySQL-5.6及以上 Python Python3.6及以上 PyMySQL 1、获取部署安装包: wget https://osp-1257653870.cos.ap-guangzhou.myqcloud.com/WeBASE/releases/download/v1.5.4/webase-deploy.zip 2、解压安装包: unzip webase-deploy.zip 3、进入目录: c...

林中有神君 3608

Rust 异步编程 async/await

Rust 的异步编程模型 async/await 提供了一种简洁、高效的方式来处理异步操作。它允许开发者以一种更自然和直观的方式来处理异步操作,同时保持了 Rust 的安全性和性能。通过 async/await,Rust 为异步编程提供了一流的语言支持,使得编写高效且可读性强的异步程序变得更加容易。

QQ672168的博客 1344

使用CloudCompare和CANUPO进行点云分类的编程指南

在本文中,我们将介绍如何使用CloudCompare和CANUPO库进行点云分类的编程。CloudCompare是一款功能强大的开源点云处理软件,而CANUPO是一个用于点云分类和分割的C++库。这只是一个简单的点云分类示例,CANUPO库还提供了其他更高级的功能和算法,以满足各种点云分类需求。该函数接受点云数据、地面点掩码和非地面点掩码作为输入,并将分类结果存储在这两个掩码向量中。完成安装后,我们可以开始编写点云分类的代码。最后,我们遍历点云数据,并根据地面点和非地面点的掩码将结果打印出来。

ByteWhisper的博客 1060

异步编程:Rust 的 async/await 详解

Rust异步编程模型通过async/await语法、Future Trait和异步运行时(Tokio/async-std)实现高效非阻塞I/O操作。async标记异步函数返回Future,await暂停但不阻塞线程,允许运行时调度其他任务。异步运行时管理任务调度和事件循环,Tokio提供完整的异步I/O支持。通过tokio::spawn和select!宏可实现并发任务处理。这种模型结合Rust的内存安全特性,使开发者能编写高性能、可维护的异步应用,特别适合I/O密集型场景。

2501_93870138的博客 993

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Rust异步编程之async与.await

介绍了Rust中异步编程基本语法async与.await和Future,以及常见的运行时

飞鹰技术 1098

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Rust异步编程——1、Async 编程简介

async是 Rust 选择的 异步编程模型,下面我们来介绍下它的优缺点,以及何时适合使用。

码刀攻城 666

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

文章标题:深入探索 Rust 中的异步编程:使用 async 和 await 提高开发效率

在现代软件开发中,异步编程成为了处理并发任务和提高性能的重要手段。尤其是在高并发、高 I/O 的应用中,如何高效地进行并发控制是开发者面临的一大挑战。而在众多编程语言中,Rust 作为近年来广受关注的系统编程语言,其在内存安全和性能上的优势被许多开发者称赞。而异步编程在 Rust 中也得到了很好的支持,借助async和await关键字,我们可以方便地实现高效的异步编程。本文将深入介绍 Rust 中的异步编程机制,包括如何在 Rust 中使用async和await。

桂月二二博客 1260

Rust异步编程终极演进:AreWeRustYet追踪async/await从稳定到生态成熟

AreWeRustYet 是一个精心策划的 Rust 生态追踪列表,收录了社区各领域的 "Are We \*Thing\* Yet" 成熟度追踪站。其中最核心的 **Are We Async Yet** 站,完整记录了 Rust 异步编程的演进轨迹:从 `async`/`await` 语法在 Rust 1.39 中正式稳定,到运行时、Web 框架等生态逐步走向成熟。对于正在评估"Rust 异步编程

gitblog_01049的博客 159

Rust异步编程的世界:为什么需要async/await?

文章摘要:本文探讨了Rust异步编程的必要性,对比了同步I/O的局限性和异步模型的高效性。通过代码示例展示了同步服务器的线程开销问题,并介绍了Rust async/await如何解决这些问题。文章分析了异步编程的核心优势:更高的并发性能、更低的内存消耗,以及async/await语法带来的可读性提升和一致的错误处理机制。技术验证基于Rust 1.70.0版本,证实了异步模型在处理高并发场景时的优越性。

lita527的博客 898

Rust 异步编程演进:从 async/await 到 async 闭包的完整指南

Rust 语言的异步编程能力在过去几年中经历了显著的演进,从基础的 async/await 语法到即将到来的 async 闭包功能,这一系列改进正在让异步 Rust 的使用体验逐渐接近同步 Rust 的水平。对于想要构建高性能网络服务的开发者来说,理解 Rust RFCs 中的异步编程演进至关重要。 ## 🌟 异步编程的起点:RFC 2394 在 2018 年,[RFC 2394](http

gitblog_00905的博客 509

异步编程革命:Rust async/await完全指南

异步编程革命:Rust async/await完全指南 本文深入探讨了Rust异步编程的核心机制,从Future执行模型与任务调度机制、Pin和Unpin的内存安全原理,到Stream流处理与多Future并发技术,最后通过异步Web服务器实战开发展示完整应用。文章详细解析了Rust异步编程的底层实现原理和高级应用技巧,为开发者提供从基础到实战的完整指南。 Future执行模型与任务调度机制 在R...

gitblog_00027的博客 1262

Rust Async 异步编程(十):一些疑难问题的解决方法

Rust Async 异步编程(十):一些疑难问题的解决方法

ProgramNovice的博客 916

Rust 异步编程实战

在复杂的应用中,定义自定义错误类型可以提高代码的可读性和可维护性。write!(f, "{:?}", self)async-std提供了一个简化的异步编程接口,与 Rust 标准库接口相似,使得异步编程更易于理解。println!("获取的数据: {}", data);});Tokio是一个功能强大的异步运行时,适用于构建 I/O 密集型应用。它支持异步 I/O、任务调度和定时器等功能。// 模拟异步延迟println!("延迟完成");

好看资源网的博客 1182

Rust Async 异步编程(二):Future trait

Rust Async 异步编程(二):Future trait

ProgramNovice的博客 716

futures-await源码剖析:探索Rust异步编程的早期实现

futures-await是Rust异步编程发展历程中的重要探索项目,它为Rust开发者提供了早期的async/await语法支持,是现代Rust异步生态系统的重要基石。本文将深入剖析futures-await的源码结构与核心实现,帮助开发者理解Rust异步编程模型的演进过程。 ## 项目核心架构解析 futures-await项目采用模块化设计,主要包含三大核心组件: - **运行时支持库

gitblog_01150的博客 803

掌握Rust异步编程:探索Tokio与async-std

本文深入探讨了Rust语言中的网络编程基础,详细介绍了TCP和UDP协议的使用方法。通过本文介绍了Rust语言中JSON处理的基础知识,涵盖了序列化和反序列化的实现方法,以及如何在HTTP请求和响应中应用。同时,还讨论了处理JSON数组和自定义序实际案例,我们学习了如何使用Rust标准库进行TCP和UDP编程,并探讨了如何使用async-std库和tokio进行异步网络编程。同时,我们还介绍了网络编程中的性能优化和错误处理技巧。希望本文能为初学者提供Rust网络编程的敲门砖,并在实际项目中灵活应用所学知识。

silenceallat的博客 1177
上一篇: Rust 项目实战:异步多线程 Web 服务器
下一篇: VSCode + CMake + GoogleTest 实现 C++ 单元测试
UestcXiye
博客等级 码龄8年 9031粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值