[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