先来区分两个概念:并发 和 并行,这两个概念随着计算机越来越多的利用多处理器的优势时显得愈发重要。
- 并发:Concurrent,代表程序的不同部分相互独立的执行。
- 并行:Parallel,代表程序不同部分于同时执行。
Rust团队一开始认为 内存安全 和 并发问题,是两个独立的问题需要分开解决。但后来发现,所有权系统和类型系统是同时解决这两个问题的强有力工具。
因此在使用Rust时,你可以在开发阶段就完善代码,而不是在运行时才发现错误。称之为无畏并发,无畏并发令你的代码免于出现诡异的 bug 并可以轻松重构且无需担心会引入新的 bug。
在本章中,我们把并发问题和并行问题统称为并发,不作区分,除非特殊说明。
如下是本章将要涉及到的内容:
- 如何创建线程来同时运行多段代码。
- 消息传递(Message passing)并发,其中通道(channel)被用来在线程间传递消息。
- 共享状态(Shared state)并发,其中多个线程可以访问同一片数据。
- Sync 和 Send trait,将 Rust 的并发保证扩展到用户定义的以及标准库提供的类型中。