首先请记住一句话,多线程的编程功力直接决定着服务器性能的优异。
在这个多核时代,如何充分利用每个CPU内核是一个绕不开的话题,从需要为成千上万的用户同时提供服务的服务器端应用程序,到需要同时打开十几个页面并且每个页面都有几十、上百个链接的Web浏览器应用程序;从保持着几太(T)甚或几拍(P)的数据的数据库系统,到手机上的一个有良好用户响应能力的App,为了充分利用每个CPU内核,都会想到是否可以使用多线程技术。这里所说的“充分利用”包含了两个层面的意思,一个是使用到所有的内核,另一个是内核不空闲,不让某个内核长时间处于空闲状态。在C++98的时代,C++标准并没有包含多线程的支持,人们只能直接调用操作系统提供的SDK API来编写多线程程序,不同的操作系统提供的SDK API以及线程控制能力不尽相同。到了C++11,终于在标准之中加入了正式的多线程的支持,由此我们可以使用标准形式的类来创建与执行线程,也使得我们可以使用标准形式的锁、原子操作、线程本地存储(TLS)等来进行复杂的各种模式的多线程编程,而且C++11还提供了一些高级概念,比如promise/future、packaged_task、async等简化某些模式的多线程编程。
多线程可以让我们的应用程序拥有更加出色的性能,但是,如果没有用好,多线程又比较容易出错且难以查找错误所在。作为一名C++程序员,掌握好多线程并发开发技术,是学习的重中之重。而且为了能在实践工作中承接旧代码系统的维护工作,学习C++11之前的多线程开发技术也是必不可少的,而以后开发新功能,C++11将是大势所趋。其实很多原理都是类似的,相信大家学的时候会感受到这一点。