前言

我与多线程的邂逅是在毕业后的第一份工作中。那时我们正在写一个填充数据库的程序。不过,需要处理的数据量很大,每条记录都是独立的,并且需要在插入数据库之前,对数据量进行合理分配。为了充分利用10核UltraSPARC CPU(Ultra Scalable Processor ARChitecture,终极可扩充处理器架构(大端)),我们使用了多线程,每个线程处理自己所要记录的数据。我们使用C++和POSIX线程库完成编码,也犯了一些错误——当时,多线程对于我们来说是一个新事物——不过,最后我们还是完成了。也是在做这个项目的时候,我开始注意C++标准委员会和刚刚发布的C++标准。

我对多线程和并发有着浓厚的兴趣。虽然,别人觉得多线程和并发难用、复杂,还会让代码出现各种各样的问题,不过,在我看来这是一种强有力的工具,能让你充分使用硬件资源,让你的程序运行的更快。

从那以后,我开始使用多线程和并发在单核机器上对应用性能和响应时间进行改善。这里,多线程可以帮助你隐藏一些耗时的操作,比如I/O操作。同时,我也开始学习在操作系统级别上使用多线程,并且了解Intel CPU如何处理任务切换。

同时,对C++的兴趣让我与ACCU有了联系,之后是BSI(英国标准委员会)中的C++标准委员会,还有Boost。也是因为兴趣的原因,我参与了Boost线程库的初期开发工作,虽然初期版本已经被开发者们放弃,但是我抓住了这次机会。我曾经是Boost线程库的主要开发者和维护者,现在我已经将开发维护的任务交给了别人。

作为C++标准委员会的一员,对现有标准的缺陷的和不足进行改善,并为新标准提出建议(新标准命名为C++0x是希望它能在2009年发布,不过最后因为2011年才发布,所以官方命名为C++11)。我也参与很多BSI的工作,并且我也为自己的建议起草建议书。当委员会将多线程提上C++标准的日程时,我高兴得差点飞起来,因为我起草及合著的多线程和并发相关的草案,将会成为新标准的一部分。我也会继续关注并参与C++17标准的对并行部分的修订、并发TS(扩展),以及对未来并发的一些建议。新标准将我(计算机相关)的两大兴趣爱好——C++和多线程——结合起来,想想还有点小激动。

本书旨在教会其他C++开发者如何安全、高效地使用C++17线程库和并发TS(扩展)。我对C++和多线程的热爱,希望你也能感受得到。