序言

低级并发实践

本书对Rust语言中的低级并发进行了很好的概述,包括线程、锁、引用计数、原子性、mailbox/channel 以及其他很多东西。它深入探讨了 CPU 和操作系统的问题,后者总结了使并发代码在 Linux、macOS 和 Windows 上正常工作的固有挑战。我特别高兴地看到,Mara 用 Rust 的工作代码来说明这些主题。书中最后讨论了信号灯、无锁链表、队列锁、序列锁,甚至是RCU。

那么,这本书能给像我这样的人带来什么呢?我已经写了近40年的C语言代码,最近一次是在Linux内核的深处。

我第一次了解 Rust 是在一些爱好者和Linux相关会议上。尽管如此,我还是很高兴地做着自己的事情,直到有人在一篇与Rust有关的LWN文章《使用Rust进行内核开发》中点名批评我。因此,我写了一个题为 “你想用Rust开发Linux内核?“的博客系列。这个博客系列引发了一些激烈的讨论,其中一些在该系列的评论中可以看到。

在其中一次讨论中,一位长期从事Linux内核开发,同时也写了很多Rust代码的人告诉我,在用Rust写并发代码时,你应该按照Rust希望你写的方式来写。我后来了解到,尽管这是一个很好的建议,但它留下了一个问题,即Rust到底想要什么。本书对这个问题给出了很好的答案,因此对希望学习并发的Rust开发者和希望学习如何在Rust中最好地编写并发代码的其他语言的开发者来说都很有价值。

我当然属于后者。然而,我必须承认,许多关于Rust并发性的激烈讨论让我想起了我的父母和祖父母在很久以前对锯子和钻头等电动工具上添加的不方便的安全功能的抱怨。其中一些安全功能现在已经无处不在,但锤子、凿子和电锯并没有什么变化。要研究出哪些机械安全功能能经受住时间的考验一点也不容易,所以我建议以一种极度谦逊的态度来对待软件安全功能。请理解,我是针对这些功能的支持者和反对者的。

这就把我们带到了另一个潜在的读者群体–Rust的怀疑者。虽然我相信大多数Rust怀疑论者通过指出改进的机会为社区提供了有价值的服务,但除了最精通Rust的怀疑论者之外,所有的人都会从阅读本书中受益。如果不出意外的话,这样做将使他们能够提供更尖锐和更有针对性的批评意见。

还有那些对Rust情有独钟的非Rust开发者,他们更愿意在自己喜欢的语言中实现Rust的并发相关安全机制。本书将让他们更深入地了解他们想要复制的Rust机制,或者更好的是,在此基础上进行改进。

最后,任何数量的Linux内核开发者都注意到了Rust在被纳入Linux内核方面所取得的进展;例如,见Jonathan Corbet的文章,“Rust在内核中的下一步”。截至2022年10月,这仍然是一个实验,但它被越来越认真地对待。事实上,认真到Linus Torvalds已经在Linux内核的6.1版本中接受了Rust语言支持的第一批内容。

无论你是为了扩大你的Rust剧目以包括并发,还是为了扩大你的并发剧目以包括Rust,还是为了改善你现有的非Rust环境,或者只是为了从不同的角度来看待并发,我都希望你在你的旅程中取得最好的成绩!

Paul E. McKenney

Meta Platforms 内核团队

Meta

2022年10月