exp:
你吃飯吃到一半,**來了,你一直到吃完了以後才去接,這就說明你不支援併發也不支援並行。
你吃飯吃到一半,**來了,你停了下來接了**,接完後繼續吃飯,這說明你支援併發。 (不一定是同時的)
你吃飯吃到一半,**來了,你一邊打**一邊吃飯,這說明你支援並行。
併發的關鍵是你有處理多個任務的能力,不一定要同時。
並行的關鍵是你有同時處理多個任務的能力。
所以我認為它們最關鍵的點就是:是否是『同時』。
定義了序列系統並行化後的加速比公式。
加速比定義:加速比 = 優化前系統耗時 / 優化後系統耗時
加速比越高,說明優化越明顯。簡單介紹一下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越低,加速比也就越高
定義一下序列執行時間為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 是 解釋一 並行是指兩個或者多個事件在同一時刻發生 而併發是指兩個或多個事件在同一時間間隔發生。解釋二 並行是在不同實體上的多個事件,併發是...
併發和並行的區別
併發就是一心二用 多用 比如你一邊聽老師講課,一邊低頭看課桌下韓寒的 這兩件事你在同時做,而且這兩件事並不一定需要相關。而並行就是兵分幾路幹同乙個事情。比如別人看 只能一行一行的看,而你能一目十行,這就是並行。關於併發和並行的區別,go語言有乙個非常好的教材,叫做 併發不是並行 它以go語言為例,並...
併發和並行的區別
在github上看到一幅圖,問如何向五歲的小孩講解併發和並行。然後有人以這幅圖做答 用咖啡機的比喻來形容併發和並行,從中最直接的體會是,併發是有狀態的,某一線程同時執行乙個任務,完了才能進行到下乙個,而並行是無狀態的。併發與並行是兩個既相似而又不相同的概念 併發性,又稱共行性,是指能處理多個同時性活...