今日,苹果公司有一个大消息,新版的mac电脑cpu使用到了自研的arm架构cpu,由台积电代工,制程和性能上都有了大幅度的提升。苹果此举证明了近些年来英特尔作为其合作商,cpu性能提升有限,更小纳米尺度的cpu迟迟制造不出来的事实。实际上不只是英特尔,整个处理器行业都遇到的一个大趋势就是单核处理器的性能提升越来越缓慢,cpu性能提升更多的时候比拼的是核数的提升。在挑选手机的时候,很多人会把cpu的核数作为一个很重要的衡量手机快慢的指标,这样的做法既对也不对。为什么这么说呢,核数固然很重要,但是运行在cpu上的一段段程序能否真正的将多核的优势利用起来,可能更为重要。这也正是本书想要教会大家的知识,如何在cpu多核化趋势愈发明显的世界里,让自己的程序能够吃到这一波处理器多核化带来的的红利。

    可能这个时候有同学就会问了,想多线程多进程的使用大家也都清楚,要想利用多核的优势,将任务交给多个线程或者进程去做就好了。但真的是这么简单吗?我们来做一个实验,将一个变量从0开始,不断累积加1直到100000000,分别使用不同的线程数来完成这个任务,实验结果如下:

    线程数 耗时(使用tsc计数器来统计)
    1 1702538261
    10 4816327883
    100 5773059772
    1000 5850909219

    实验环境为:48核机器,cpu型号为Intel(R) Xeon(R) CPU E5-2670 v3 @ 2.30GHz。

    从上述实验可以看出,在使用多线程后,任务非但没有变快,反而还变慢了!!!欢迎来到并发编程的世界,至于为什么,我将在后面的章节为读者们一一讲解。

    在小册的后续内容中,我们将从Amdahl定律讲起,将内容大致分为三个章节。第一章节主要讲解一切必须了解的底层硬件和理论知识,从现代处理器的多核架构,到内存一致性模型。第二章节负责讲解处理器和编译器向我们提供的可以帮助我们完成并发编程任务的若干指令和接口,比如原子指令,内存屏障,各种类型的锁等等,以及它们在底层上是如何实现的。第三章更多的是讲解各类并发安全并且高性能的数据结构,比如无锁链表,队列,跳表,哈希表等等。这三章内容下来,保证读者不止能够知其然,还能够知其所以然。无论是理论,还是实际的工作,都能够得到提升。

    本小册中代码会用c++或者java语言表达,但是即使不了解这两类语言也不会影响对知识的理解。