Rust中的原子性与锁
250 页
Chinese
PDF
4.5

Rust中的原子性与锁

Rust中的原子性与锁

作者:

年份:

简介:

引言

由Mara Bos所著的《Rust Atomics and Locks》(中文译名《Rust中的原子性与锁》)并非又一本普通的多线程编程指南。它是一部深入且技术性极强的研究著作,探讨了原子操作、锁和内存屏障在处理器及操作系统层面的实际工作原理,以及这些机制在Rust语言中的呈现方式。该书于2023年出版,迅速成为所有在Rust中编写高负载、安全且高效并发程序者的必读之作。

本书内容

本书采用由浅入深的递进式结构。从基础开始:什么是原子性,存在哪些类型的原子操作(load、store、CAS、fetch_add等),以及它们如何映射到处理器指令。接着,作者转向Rust的内存模型,解释编译器和处理器如何对指令进行重排序,以及这如何影响多线程代码的正确性。特别关注内存屏障(memory ordering)——Acquire、Release、AcqRel、SeqCst——及其实际应用。随后,探讨经典的同步原语:互斥锁、条件变量、信号量、屏障。每个原语不仅仅是描述,而是使用原子操作从零开始实现。这使得读者能够理解锁的内部结构并评估其开销。本书以对lock-free数据结构(栈、队列、哈希表)以及并发编程模式(如read-copy-update (RCU) 和 hazard pointers)的讨论作为结尾。

目标读者

本书面向有经验的开发者,他们已熟悉Rust语法并对多线程有基本了解。对于刚开始学习Rust的初学者来说,本书可能较为困难:作者不解释语言基础,而是直接进入复杂概念。然而,如果你已经用C++、Java或Go编写过多线程程序,并想了解Rust如何使并发变得安全高效——那么这本书适合你。

读者将学到什么

  • 原子操作在CPU层面(x86、ARM、RISC-V)如何工作。
  • 什么是内存模型,以及它如何影响编译器优化。
  • 如何为不同场景正确选择内存顺序(memory ordering)。
  • 如何从零实现互斥锁、信号量、条件变量。
  • 如何编写无数据竞争和未定义行为的lock-free数据结构。
  • 如何在实际中使用std::sync::atomic和std::sync::Mutex。
  • 如何调试和测试多线程代码。
  • RCU和hazard pointers在Rust中如何工作。

优点

本书的首要且最大优点是深度。Mara Bos不仅仅是复述文档,而是解释过程的物理原理:为什么原子操作代价高昂,缓存行如何影响性能,上下文切换时会发生什么。其次是实践导向。每一章都包含完整、可运行的代码示例,读者可以运行并进行实验。第三是时效性。本书基于Rust 2021 edition编写,涵盖了所有现代语言特性,包括std::sync::LazyLock和std::sync::OnceLock。第四是表述清晰。尽管主题复杂,作者写作结构清晰,定义明确,解释到位。特别值得一提的是关于内存模型的章节——它是我在Rust文献中见过的最好的一章。

推荐人群

本书对系统软件开发人员、数据库创建者、游戏引擎开发者、高负载Web服务器开发者,以及所有希望在Rust中编写高性能且安全并发代码的人都会有所帮助。如果你从事嵌入式系统开发或编写驱动程序——本书将让你理解原子操作如何与硬件交互。

推荐