並行與併發

2021-09-24 18:17:50 字數 1242 閱讀 4737

有時間再看看這個,它有python並行併發練習。

你吃飯吃到一半,**來了,你一直到吃完了以後才去接,這就說明你不支援併發也不支援並行。

你吃飯吃到一半,**來了,你停了下來接了**,接完後繼續吃飯,這說明你支援併發。  (不一定是同時的)

你吃飯吃到一半,**來了,你一邊打**一邊吃飯,這說明你支援並行。  

併發的關鍵是你有處理多個任務的能力,不一定要同時。

並行的關鍵是你有同時處理多個任務的能力。  

所以我認為它們最關鍵的點就是:是否是『同時』。

並行的兩個重要定律(以下為理解)

amdahi定律

amdahi定律定義了序列系統並行化後的加速比公式。

加速比定義:加速比 = 優化前系統耗時 / 優化後系統耗時

加速比越高,說明優化越明顯。簡單介紹一下amdahi定律公式的推導。

優化後耗時t_n=t1(f+1/n(1-f)),其中t1表示優化前耗時,f表示序列比例,(1-f)表示並行比例,下標n就是處理器的個數。

匯入加速比公式,也就是t1/t_n,也就是t_n=t1(f+1/n(1-f)),公式只是進行簡單介紹。

從公式可以看出,加速比是和序列比例f成反比的,從公式可以看出增加cpu的個數僅僅是一種提供加速比的方法,增加cpu個數的同時,還可以提供降低序列比例來做,也就是序列比例f越低,加速比也就越高

gustafson定律

custafson公式也是並行的乙個比較重要的公式,現在介紹一下custafson公式的推導。

定義一下序列執行時間為a,並行執行時間為b。即單核cpu情況,執行時間為a+b總執行時間為a+nb,n表示cpu個數。

//定義序列比例

f=a/(a+b)

//得到加速比

s(n)=a+nb/a+b=a/a+b + nb/a+b = f + n*(b-a+a)/a+b = f + n(1-f)

從公式可以看出,如果序列比例足夠小的情況,加速比其實就是約等於處理器個數,也就是說通過加多cpu的個數就能提高加速比。

兩個公式看起來似乎有點矛盾,其實不然,兩個公式只是從不同角度分析問題。amdahi是說在序列比例一定時,通過加cpu的方法是有上限的,通過降低序列比例同時增加cpu個數可以提高加速比。custafson是說在序列比較趨於很小的情況,從公式可以看出,加cpu就可以提高加速比

--------------------- 

並行的兩個重要定律摘自原文: 

併發與並行

做併發程式設計之前,必須首先理解什麼是併發,什麼是並行,什麼是併發程式設計,什麼是並行程式設計。併發 concurrency 和並行 parallellism 是 解釋一 並行是指兩個或者多個事件在同一時刻發生 而併發是指兩個或多個事件在同一時間間隔發生。解釋二 並行是在不同實體上的多個事件,併發是...

併發與並行

併發性 concurrence 指兩個或兩個以上的事件或活動在同一時間間隔內發生。併發的實質是乙個物理cpu 也可以多個物理cpu 在若干道程式之間多路復用,併發性是對有限物理資源強制行使多使用者共享以提高效率。並行性 parallelism 指兩個或兩個以上事件或活動在同一時刻發生。在多道程式環境...

並行與併發

所有的併發處理都有排隊等候,喚醒,執行至少三個這樣的步驟.所以併發肯定是巨集觀概念,在微觀上他們都是序列被處理的,只不過資源不會在某乙個上被阻塞 一般是通過時間片輪轉 所以在巨集觀上看多個幾乎同時到達的請求同時在被處理。如果是同一時刻到達的請求也會根據優先順序的不同,而先後進入佇列排隊等候執行。併發...