1. 为什么并行
a. 摩尔定律失效
摩尔定律:预计18-24月芯片性能提升一倍
b. 多核CPU 出现
2. 并行概念
同步(Synchronous)和异步 (Asynchronous)
同步
同步调用,这种调用方式是一种阻塞式的调用方式,即客户端(主调用方)代码一直阻塞等待直到被服务端(被调用方)返回 为止
异步
一个可以无需等待被调用函数的返回值就让操作继续进行的方法
并发(Concurrency) 和 并行 (Parallelism)
并发
当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间 段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)
多个执行程序被CPU不停切换执行
并行
当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)
临界区(Critical Section)
表示一种公共资源或者共享数据,可以被多个线程使用。但每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程必须等待
堵塞(Blocking)和 非堵塞 (Non-Blocking)
堵塞
一个线程占用临时区资源,那么其他所有需要这个线程就必须进行等待,等待会导致线程挂起。
非堵塞
允许多个线程同时进入临界区
死锁(Deadlock)、饥饿 (Starvation) 和 活锁 (Livelock)
死锁
两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程
饥饿
由于别的并发的激活的过程持久占有所需资源,使某个异步过程载客预测的时间内不能被激活
例子:当有多个进程需要打印文件时,如果系统分配打印机的策略是最短文件优先,那么长文件的打印任务将由于短文件的源源不断到来而被无限期推迟,导致最终的饥饿甚至饿死
活锁
指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败。 活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。
例子:马路中间有条小桥,只能容纳一辆车经过,桥两头开来两辆车A和B,A比较礼貌,示意B先过,B也比较礼貌,示意A先过,结果两人一直谦让谁也过不去