Java併發程式設計實戰--Amdahl定律

衣舞晨風發表於2017-06-03

     在有些問題中,如果可用資源越多,那麼問題的解決速度就越快。例如,如果參與收割莊稼的工人越多,那麼就能越快地完成收割工作。而有些任務本質上是序列的,例如,即使增加再多的工人也不能增加作物的生長速度。如果使用執行緒主要是為了發揮多個處理器的處理能力,那麼就必須對問題進行合理的並行分解,並使得程式能有效地使用這種潛在的並行能力。

     大多數併發程式都與農業耕作有著許多相似之處,它們都是由一系列的並行工作和序列工作組成的。Amdahl定律描述的是:在增加計算資源的情況下,程式在理論上能夠實現最高加速比,這個值取決於程式中可並行元件與序列元件所佔的比重。假定F是必須被序列執行的部分,那麼根據Amdahl定律,在包含N個處理器的機器中,最高的加速比為:

這裡寫圖片描述

     當N趨近無窮大時,最大的加速比趨近於1/F。因此,如果程式有50%的計算需要序列執行,那麼最高的加速比只能是2(而不管有多少個執行緒可用):如果在程式中有10%的計算需要序列執行,那麼最高的加速比將接近10。Amdahl定律還量化了序列化的效率開銷。在擁有19個處理器的系統中,如果程式中有10%的部分需要序列執行,那麼最高的加速比為5.3%(53%的使用率),在擁有100個處理器的系統中,加速比可以達到9.2(9%的使用率)。即使擁有無限多的CPU,加速比也不可能為10.

     下圖給出了處理器利用率在不同序列比例以及處理器數量情況下的變化曲線。(利用率的定義為:加速比除以處理器的數量。)隨著處理器數量的增加,可以很明顯地看到,即使序列部分所佔的百分比很小,也會極大地限制當增加計算資源時能夠提升的吞吐率。
這裡寫圖片描述

在所有併發程式中都包含一些序列部分。如果你認為你的程式中不存在序列部分,那麼可以再仔細檢查一遍。

Java併發程式設計實戰pdf及案例原始碼下載:
http://download.csdn.net/detail/xunzaosiyecao/9851028

作者:jiankunking 出處:http://blog.csdn.net/jiankunking

相關文章