[TOC]
## 多核兴起
20世纪40年代第一台电子管计算机的发明标志计算工具进入了一个崭新的时代。20世纪50年代末,晶体管的发现促成了计算机技术的一大飞跃,其性能先之电子管计算机数十倍到数百倍以上。而之后集成电路时代的到来又为计算机的发展开辟了一个新的里程。
20世纪70年代,集成电路技术能够将计算机的控制单元和算术逻辑单元集成到一个芯片上制成了微处理器芯片。之后,对计算机性能的提升研究主要集中在对微处理器的性能的提高。传统的提高处理器性能的方法主要有三种途径: (一)提高主频;(二)优化技术,采用功能更强大的指令,流水处理的技术;(三)增加 Cache 的容量。
近年来,通过提高处理器主频来提升处理器性能的方法已经不大可能有大的进展,因而业界对处理器性能的提升逐渐转向了**超线程、多核、缓存**等技术。其中,多核是目前一个热点。
## 并发,并行,串行
**并发(Concurrent)和并行(Parallel),串行(Serial)**
### 并发与并行
当有多个线程在操作时,如果系统只有一个 CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个**时间片**,再将时间片分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状态.这种方式我们称之为**并发**(Concurrent).
当系统有一个以上 CPU 时,则线程的操作有可能非并发.当一个 CPU 执行一个线程时,另一个 CPU 可以执行另一个线程,两个线程互不抢占 CPU 资源,可以同时进行,这种方式我们称之为**并行**(Parallel)
**并发**是逻辑上的同时发生,**并行**更多是侧重于物理上的同时发生。**并发**往往是指程序代码的结构支持并发,**并发**的程序在多cpu上运行起来才有可能达到并行,**并行**往往是描述运行时的状态。
并发 和并行 是:
1. 并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。
2. 并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。
3. 在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。
[来自并发编程网](http://ifeve.com/parallel_and_con/)
### 并行与串行:
1. 串行与并行相对应,是指的我们从事某项工作时一个步骤一个步骤的去实施。
2. 指串行通信。串行通信是指 使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。
**问:** 并行计算与串行计算有什么区别?
**答:** 举例:
~~~
{
1+1=
2+2=
3+3=
4+4=
}
~~~
请王小明同学来计算4道题目。
小明每次算一道题花费1s,总共耗时4s。
请第二组的韩梅梅,李雷来计算4道题目。(串行)
小两口相视一笑花费0.1s
然后每个人做两道题,花费2s(并行)
总共花费2.1s
**追问:**
好生动!所以并行计算就是多个串行计算在时间上并行是吗?
**回复:**
是的。就是多个CPU计算单元(有的是GPU),同时工作。
但是因为需要协作,需要“相视一笑”(通信),所以不能效率100%
**回复:**
有的任务可以并行;有的并行效率不高,节省时间有限,浪费计算资源;有的难以并行。
[来自知乎](https://www.zhihu.com/question/36552442/answer/68073855)
其实并行和串行概念很广:
1、在数据传输方面是说数据多位同时传输还是单位传输的问题.不能说哪种更快,主要看时钟、传输距离、物理介质、电压形式(如果是电信号)等.如果同等的以上条件,并行传输要快,但是增加了复杂度,大型计算机或通信设备上会采用,一般的个人电脑、手机等通信设备则会采用更方便的串行传输.
2、在计算方面是说计算机同时执行指令的方式.巨型机、大型机一般是并行计算,而个人电脑则相反.并行计算要快得多,但同样复杂度也高.
总之,同等条件下,并行在速度上有优势,但成本和方便上串行有优势.现在大家所说的串行传输快只是并行传输的成本太高,不方便罢了.
## 并发编程
**并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。**
并行编程的目标也是达到最高的处理速率,如hadoop利用多台机器进行并行处理。
## 大脑是并行还是并发?
既非并行也非并发,更不是单核,拿计算机来比根本就不对。
不要以为你自己知道的事情就是大脑在处理的全部信息,你在想问题的时候,大脑还在处理身体传递过来的大量信息,你能站立不倒,这也是大脑的功劳。
你看一幅画时,当你还没明白这幅画画的是什么时,大脑已经做了很多工作,这些工作你根本意识不到。
(Xee:在我看来:不但没有可比性,而且现在的技术也不能完全解析人类大脑的力量!等到解密大脑的那一天,可能会出现新名词)
[来自知乎](https://www.zhihu.com/question/20570224)
## 总结
保姆(并发系统)喂2个孩子(多个线程)吃饭(多个动作),你的代码逻辑要让主人觉得2个孩子都在吃饭(有并行的潜力);如果保姆只有一个人(单核),只能轮换(串行、交替)着每人喂一口,表面上(逻辑上)2个孩子都(“同时”,并发)在吃饭;如果保姆有两个(多核)甚至两个以上,就是两个人各自(并行)喂1个孩子,2个孩子也同时(物理上真正的同时)在吃饭。
“并行”概念是“并发”概念的一个子集:并行是并发在多核处理器上的物理实现;交替串行是并发在单核处理器上的物理实现。
## 参考
http://3961409.blog.51cto.com/3951409/759708