1. 程式人生 > >淺析併發與並行

淺析併發與並行

併發和並行從巨集觀上來講都是同時處理多路請求的概念。(同一時間點開始的)

並行與併發的區別:

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,這樣可以達到多臺機器同時對一件事進行處理大大提高效率和效能)。

 

並行:

同一時刻可以處理多個任務 ;兩個並行執行的任務如下圖:

 

併發:

同一時刻只能處理一個任務,但一個時間段內可以對多個任務交替處理 ;兩個併發執行的任務如下圖 :

幾個栗子

並行:相當於兩個人給兩個地方搬磚,因為他們是同時進行的。

併發:相當於一個人給兩個地方搬磚,輪流給兩個地方搬磚,因為他是交替進行的。

 

總結:

併發是兩個任務可以在重疊的時間段內啟動,執行和完成。

並行是任務在同一時間執行,例如,在多核處理器上。

併發是獨立執行過程的組合,而並行是同時執行(可能相關的)計算。

併發是一次處理很多事情,並行是同時做很多事情。