## 并发的驱动力
并发编程复兴的主要驱动力来自于“多核危机”。
## 并发与并行
并发程序含有多个逻辑上的独立执行块,它们可以独立地并行执行,也可以串行执行。
并发是同一时间应对(dealing with)多件事情的能力;
并行是同一时间动手做(doing)多件事情的能力。
并发程序的执行通常是不确定的,它会随着事件时序的改变而给出不同的结果。对于真正的并发程序,不确定性是其与生俱来且伴随始终的属性。与之相反,并行程序可能是确定。
传统的“线程与锁”模型并没有显式支持并行。
##单核CPU级别的并行
单核在位级和指令级两个层次上都能够并行地使用这些晶体管资源。
## 单核CPU级别的并行 位级(bit-level)并行
对于两个32位数的加法,8位计算机必须进行多次8位计算,而32位计算机可以一步完成,即并行地处理32位数的4字节。
## 单核CPU级别的并行 指令级(instruction-level)并行
现代CPU的并行度很高,尽管处理器内部的并行度很高,但是经过精心设计,从外部看上去所有处理都像是串行的。
## 单核CPU级别的并行 数据级(data)并行
数据级并行(也称为“单指令多数据”,SIMD)架构,可以并行地在大量数据上施加同一操作。
##多核CPU级别的并行 共享内存的多处理器
每个处理器都能访问整个内存,处理器之间的通信主要通过内存进行
##多核CPU级别的并行 分布式内存的多处理器
对于分布式内存的多处理器系统,每个处理器都有自己的内存,处理器之间的通信主要通过网络进行
通过内存通信比通过网络通信更简单更快速,所以用共享内存编程往往更容易。