淺析併發與並行
併發和並行從巨集觀上來講都是同時處理多路請求的概念。(同一時間點開始的)
並行與併發的區別:
1. 並行是指兩個或者多個事件在同一時刻發生 併發是指兩個或多個事件在同一時間間隔內發生。
2. 並行是在不同實體上的多個事件 併發是在同一實體上的多個事件。
3. 在一臺處理器上“同時”處理多個任務 在多臺處理器上同時處理多個任務(hadoop分散式叢集)
併發的優點(最主要的目的):
併發可以將CPU的計算能力發揮到極致,效能得到提升。
因為併發是在同一實體(比如一個CPU)上,那麼如果他序列(單執行緒)處理任務,當有多個任務向CPU請求執行時,CPU只能執行一個,這樣CPU就會等待這個任務結束才會處理其他任務,利用率很低;而開啟多執行緒併發執行時,多個執行緒就會進行切換去搶佔CPU,CPU的空閒時間就會減少,從而提高處理效能。
併發的缺點:
併發程式之間有相互制約關係:
1.直接制約體現為一個程式需要另一個程式的計算結果;
幾個栗子
先求和,然後再算平均值兩個任務,當求和這一項沒有被執行的時候,即使cpu切換到求平均值這個程序上,也無法 執行這個程序,因為他現在需要,求和的程序執行的結果才可以進行運算執行。
2.間接制約體現為多個程式競爭某一資源,如處理機、緩衝區等。
3.併發程式在執行中是走走停停,斷續推進的。
從併發的有點與缺點上就可以看出,併發解決了多個事件同時處理時效率低,效能低的問題;但如果只需要處理一個事件的時候,他的效率和效能並沒有提高,也就沒必要使用併發;那麼如何提高對處理一個事件的效率和效能呢-----------並行。
並行的提出解決了對一件事情的處理效率和效能低的問題:
並行以hadoop分散式叢集的栗子來說明:
首先複習下這個:jar包提交執行在yarn上的執行流程:
1.使用者提交jar包,向resourcemanager請求提交任務
2.resourcemanager接受任務,並隨機選擇一臺nodemanager啟動appmaster
3.appmaster向resourcemanager請求資源
4.resourcemanager分配資源,並將資源分配資訊返回給appmaster
5.appmaster聯絡nodemanager啟動相關Task
6.執行的task時刻向appmaster彙報進度
7.reduce task將執行結果返回給appmaster
8.appmaster將結果返回給resourcemanager,並登出自己
·
·
·
·
·
·
·
·
·
(不考慮資料傾斜,每臺機器都會執行map和reduce,這樣可以達到多臺機器同時對一件事進行處理大大提高效率和效能)。
並行:
同一時刻可以處理多個任務 ;兩個並行執行的任務如下圖:
併發:
同一時刻只能處理一個任務,但一個時間段內可以對多個任務交替處理 ;兩個併發執行的任務如下圖 :
幾個栗子:
並行:相當於兩個人給兩個地方搬磚,因為他們是同時進行的。
併發:相當於一個人給兩個地方搬磚,輪流給兩個地方搬磚,因為他是交替進行的。
總結:
併發是兩個任務可以在重疊的時間段內啟動,執行和完成。
並行是任務在同一時間執行,例如,在多核處理器上。
併發是獨立執行過程的組合,而並行是同時執行(可能相關的)計算。
併發是一次處理很多事情,並行是同時做很多事情。