一.  为什么需要设计并行程序

1.摩尔定律:集成电路上可容纳的晶体管数目,每隔24个月便会增加一倍。制造工业无法取得本质上的突破造成了摩尔定律的失效。

2.硬件工程师转向多核CPU的研发。简化的硬件设计方案带来了软件设计的复杂性。

3.我们的世界本质上就是并行的。

二. 几个概念

1.同步:方法一旦开始调用,必须等到返回结果才能进行后续的操作。

2.异步:方法一旦开始调用,不必等待返回结果,调用者可以立即开始后续的操作,调用完成时再通知调用者。

3.并发:多个任务交替进行,同一时间点只执行一个任务。

4.并行:多个任务同时进行,同一时间点执行多个任务。

5.临界区:可以被多个线程使用的资源,但一次只能有一个线程,一旦被占用其他线程必须等待。

6.阻塞:等待资源的线程被挂起的情况。

7.非阻塞:占用资源的线程不会导致其他线程的挂起。

8.死锁:所有线程都被阻塞的情况。

9.饥饿:一个可运行的进程被忽视不被执行的情况。

10.活锁:多个线程在获取同一资源时反复尝试失败的过程。

11.原子性:一个操作一旦开始就不会被其他线程干扰中断。

12.可见性:当一个线程修改了某一个共享变量的值时,其他线程是否知道。

13.有序性:程序在执行时可能会进行指令重排,重排后的指令与原指令的顺序未必一致。