并发是操作系统三大主题之一。在多线程应用程序中,每个线程就像一个独立的代理程序,它们共享并访问同一块内存空间。如果不加以协调,这种共享访问会导致程序无法按预期工作。操作系统不仅提供了锁(Lock)和条件变量(Condition Variable)等原语来支持多线程应用,其本身也是最早的并发程序,必须极其小心地管理自己的内存访问。

并发编程不仅难以理解,而且极易出错,即使是专家也常常在并发算法上栽跟头。因此,编写并发代码的核心原则是保持简单

  1. 避免复杂的交互:尽量使用已被证实的经典并发范式(如锁、生产者-消费者队列)。
  2. 非必要不并发:避免过早优化,只有在真正需要时才引入并发。
  3. 使用更高层的抽象:如果确实需要并行处理,优先考虑如 Map-Reduce 这样无需直接处理锁和条件变量的简单并行模型。

掌握并发不仅需要理解理论,更需要在实践中进行大量的编码练习。