第8章 并发设计

本章主要内容

  • 线程间划分数据
  • 影响并发性能的因素
  • 性能因素对数据结构设计的影响
  • 多线程中的异常安全
  • 可扩展性
  • 并行算法的实现

之前章节着重于使用C++中的新工具来写并发代码,第6、7章中了解如何使用这些工具来设计可并发访问的数据结构,使用并发代码要比使用/设计基本数据结构频繁的多。这就好比一个木匠,不仅要知道如何做一个合页,还要熟悉组合柜和桌子的制作方法。所以要将眼界放宽,构建更大的结构,进行高效的工作。我将使用多线程化的C++标准库算法作为例子,这里的原则也适用于其他应用。

认真思考如何进行并发化设计,对于每个编程项目来说都很重要。编写多线程代码时,需要考虑的因素比写串行代码多得多。不仅包括一般性因素,例如:封装、耦合和聚合(这些在很多软件设计书籍中有很详细的介绍),还要考虑哪些数据需要共享,如何同步访问数据,哪些线程需要等待等等。

本章将会关注这些问题,从高层(但也是基本的)着眼,思考如何使用线程。哪些代码该在哪些线程上执行,以及对代码可读性的影响。并从底层实现细节上了解,如何构建共享数据来优化程序性能。