C++并发编程实战(第2版)
上QQ阅读APP看书,第一时间看更新

作者序

离开大学后的第一份工作,我就与多线程的概念和代码打交道。那时,我们的开发组要实现一个数据处理的应用,需要将传入的数据记录插入数据库。这些数据记录数量庞大,各条记录均没有相互依赖,并且需经过一定步骤的处理才能插入数据库。我们的计算机配备了10个CPU的UltraSPARC处理器,为了完全利用这些算力,我们将代码编写成多线程的形式来运行,每个线程处理自己接收的数据集。我们编写了C++代码,采用了POSIX线程,也犯了不少错误,毕竟,对我们全体成员而言,多线程前所未见。尽管如此,我们最后还是完工了。正是在该项目中,我第一次知悉C++标准委员会和当时新发布的C++标准,我对多线程和并发的浓厚兴趣自此而起。

尽管在别人眼里,这项技术既困难又复杂,还是诸多问题的根源,而我却视之为有效的工具,它使代码能充分利用现有的硬件资源,更快地运行。一些计算机操作耗时长(如I/O)进而导致延迟。为此,我后来学会了即便在单核硬件环境下,依然能利用多线程来减少这些延迟,从而改进应用软件的性能,提高响应速度。我还学习到在操作系统层面上如何进行多线程运作,以及对于英特尔的CPU如何处理任务切换。

同时,得益于对C++的喜爱,我有机会与C/C++用户协会(Association of C and C++ Users,ACCU)交流接触,后来还与英国标准协会(British Standards Institution,BSI)的C++标准专家组和Boost社群交流。出于兴趣,我跟进了Boost线程库的初期开发,当原本的开发者中止了相关工作时,我抓住机会,立即接手[1]。从2007年到2011年,我担任了Boost线程库的主力开发者和维护者,不过后来我将这项工作移交他人负责。

随着 C++标准委员会工作重心的转移——从修补现行标准的缺陷,转变为C++11标准编写提案(新标准最初命名为“C++0x”,本来希望能于2009年完成,但最终到了2011年才发布,于是官方将其正式命名为“C++11”),我更深入地参与了英国标准协会的工作,并开始起草自己的提案。等到多线程被明确提上议程,我马上全力以赴,独自起草并参与编写了许多与多线程和并发相关的提案,这些提案塑造了C++标准的一部分。我持续参与了C++标准委员会并发小组的工作,包括对C++17标准进行改进,制定并发技术规约(Concurrency Technical Specification),以及编写关于C++未来演化发展的提案等。关于计算机,我的兴趣主要有两个——C++和多线程,有幸能将它们以图书的形式结合,我倍感自豪。

本书基于我研习C++和多线程的全部经验,旨在指导其他C++开发者安全且高效地使用C++线程库和并发技术规约。我也希望将自己对这个主题的兴趣和热忱融入本书,并传递给读者。

——安东尼·威廉姆斯

(Anthony Williams)


[1] 译者注:Boost线程库第1版的作者是William E. Kempf,第2版的作者即本书作者。