



资源介绍
本书围绕 Rust 中的异步编程展开,从基础概念到实际实现,逐步深入,主要分为三个部分:异步编程基础、事件队列与绿色线程、Rust 中的 Futures 与 async/await。
第一部分:异步编程基础
并发与异步编程概述
历史演进:介绍了从无操作系统的单 CPU 执行,到非抢占式多任务、抢占式多任务、超线程和多核处理器的发展历程。
关键概念:
并发(处理多个任务)与并行(同时执行多个任务)的区别。
同步代码在操作系统和 CPU 视角下的非同步本质。
操作系统在并发中的角色,包括进程调度、系统调用等。
CPU 与操作系统协作:讲解了 CPU 的内存管理单元(MMU)、页表、特权级别等,以及中断处理机制。
编程语言如何建模异步程序流
分类:
协作式与非协作式多任务。
有栈与无栈协程。
具体实现:
操作系统线程:分析其创建开销、栈特性、上下文切换和调度特点。
绿色线程 / 纤程:探讨其栈管理、上下文切换、调度及 FFI 调用问题。
回调机制:阐述其实现方式及 “回调地狱” 问题。
协程:包括 promises 和 futures,以及 async/await 语法。
OS 支持的事件队列、系统调用与跨平台抽象
事件队列:解释了阻塞 I/O、非阻塞 I/O,以及 epoll(Linux)、kqueue(macOS)、IOCP(Windows)等事件队列的工作机制,区分就绪型和完成型事件队列。
系统调用与 FFI:通过示例讲解了不同层级的抽象,从底层的原始系统调用到高级的标准库封装,以及跨平台抽象的挑战。
第二部分:事件队列与绿色线程
创建自己的事件队列
以 Linux 的 epoll 为基础,模拟 mio 库的 API,实现一个简单的事件队列,涵盖 epoll 的设计、FFI 模块、Poll 模块及主程序实现,解释了边缘触发与水平触发事件的区别。
创建自己的纤程
介绍了指令集、硬件架构和 ABI(如 System V ABI for x86-64)的基础知识。
通过 Rust 内联汇编,实现了栈的管理、上下文切换等,构建了简单的纤程及运行时,包括 guard、skip 和 switch 函数。
第三部分:Rust 中的 Futures 与 async/await
Rust 中的 Futures
定义了 Future trait,区分叶子 future(代表资源操作)和非叶子 future(用户编写的异步任务)。
讲解了异步运行时的基本模型,包括反应器(处理 I/O 事件通知)、执行器(调度任务)和 future(可暂停的任务)。
协程与 async/await
介绍无栈协程,通过手动编写协程示例,展示其状态机本质。
讲解 async/await 如何将代码转换为状态机,以及相关的宏和预处理过程。
运行时、Wakers 与反应器 - 执行器模式
阐述运行时的设计,包括反应器和执行器的分离。
实现了 Waker 机制,使任务在事件就绪时被唤醒,完善了运行时,支持并发运行多个 future。
协程、自引用结构体与 Pinning
分析了自引用结构体在异步编程中存在的问题,以及 Rust 中 Pinning 的作用。
讲解了如何通过 Pinning 将值固定在内存中,防止移动,确保自引用的安全性。
创建自己的运行时
整合前面的知识,构建一个能运行 Rust futures 的完整运行时,包括处理 I/O、调度任务等。
讨论了异步 Rust 的挑战,如显式与隐式反应器实例化、易用性与效率的平衡等,以及异步 Rust 的未来发展。
书籍特点
实践性强:通过大量示例代码,从基础到复杂,逐步引导读者实现异步编程相关组件,如事件队列、纤程、运行时等。
深入浅出:不仅讲解 Rust 异步编程的具体实现,还涵盖了底层的 CPU、操作系统知识,帮助读者建立完整的知识体系。
兼顾理论与实践:在解释概念的同时,提供可运行的示例,使读者能够动手实践,加深理解。
适用场景
希望深入理解 Rust 异步编程原理的开发者。
对并发、并行编程感兴趣,想了解不同编程语言处理异步方式的程序员。
需要构建高性能异步应用(如网络服务、分布式系统等)的开发人员。