輕鬆理解吞吐量與延遲,信號量與互斥鎖

http://www.nowamagic.net/librarys/veda/detail/2386html

咱們知道,計算機中有不少概念並不容易理解,有些時候一個好的比喻能賽過不少句解釋。下面兩個是我看到的兩個很精彩的比喻,拿出來和你們分享一下。性能優化

吞吐量和延遲

第一比喻是關於吞吐量(throughput)和延遲(latency)的。若是你要搞網絡性能優化,這兩個概念是你必需要知道的,它們看似簡單實則不是。我相信包括我在內的不少人都曾經認爲大的吞吐量就意味着低延遲,高延遲就意味着吞吐量變小。下面的比喻能夠解釋這種觀點根本不對。該比喻來自這裏,我來作個大致意譯(非逐字翻譯)。網絡

咱們能夠把網絡發送數據包比喻成去街邊的 ATM 取錢。每個人從開始使用 ATM 到取錢結束整個過程都須要一分鐘,因此這裏的延遲是60秒,那吞吐量呢?固然是 1/60 人/秒。如今銀行升級了他們的 ATM 機操做系統,每一個人只要30秒就能夠完成取款了!延遲是 30秒,吞吐量是 1/30 人/秒。很好理解,但是前面的問題依然存在對不對?別慌,看下面。wordpress

由於這附近來取錢的人比較多,如今銀行決定在這裏增長一臺 ATM 機,一共有兩臺 ATM 機了。如今,一分鐘可讓4我的完成取錢了,雖然你去排隊取錢時在 ATM 機前仍是要用 30 秒!也就是說,延遲沒有變,但吞吐量增大了!可見,吞吐量能夠不用經過減少延遲來提升。性能

好了,如今銀行爲了改進服務又作出了一個新的決定:每一個來取錢的客戶在取完錢以後必須在旁邊填寫一個調查問卷,用時也是30秒。那麼,如今你去取錢的話從開始使用 ATM 到完成調查問卷離開的時間又是 60 秒了!換句話說,延遲是60秒。而吞吐量根本沒變!一分鐘以內仍是能夠進來4我的!可見,延遲增長了,而吞吐量沒有變。優化

從這個比喻中咱們能夠看出,延遲測量的是每一個客戶(每一個應用程序)感覺到的時間長短,而吞吐量測量的是整個銀行(整個操做系統)的處理效率,是兩個徹底不一樣的概念。用做者的原話說是:操作系統

In short, the throughput is a function of how many stages are in parallel while latency is a function of how many are in series when there are multiple stages in the processing. The stage with the lowest throughput determines the overall throughput..net

正如銀行爲了讓客戶滿意不光要提升自身的辦事效率外,還要儘可能縮短客戶在銀行辦事所花的時間同樣,操做系統不光要儘可能讓網絡吞吐量大,並且還要讓每一個應用程序發送數據的延遲儘可能小。這是兩個不一樣的目標。翻譯

信號量和互斥鎖

另一個比喻是解釋信號量(semaphore)和互斥鎖(mutex)的區別。該比喻最初來自這裏,我先翻譯一下,而後對它作個改進。htm

互斥鎖是一把公共廁所的鑰匙。一我的使用廁所的時候能夠拿到這把鑰匙,用完以後把這把鑰匙交給排隊的下一我的。

信號量是沒有人使用的廁所的鑰匙數量,全部廁所的鑰匙都同樣。好比有4個廁全部相同的鑰匙和鎖。信號量的值就是鑰匙的數量,一開始是4。當進來一我的的時候數量就是少一個,若是4個廁所都滿了,信號量就成0了,出去一我的就增長1,並把鑰匙交給排隊的下一我的。

這個比喻並非太好,尤爲是它沒法解釋二元(binary)信號量和互斥鎖的區別!我把這個比喻作了改進。互斥鎖的比喻仍是和上面同樣,須要指出的是,當你拿到那把鑰匙的時候你就是它的擁有者(owner),別人是沒法打開廁所門的。

而信號量究竟是什麼呢?它就是一個大的公共廁所,裏面有若干個位置,外面的大門口有一個能夠翻動牌子寫着「已滿」和「可用」,當裏面還有空的位置的時候,進去的人不用翻動這個牌子,直到沒有位置時最後一個進去的人必須把它設成「已滿」,這時後面的人必須排隊等候,而後出去的人必須把牌子翻到「可用」,若是須要的話。

很好理解對嘛?那麼它怎麼解釋二元信號量呢?也就是當這個廁所裏面只能容納一我的的時候,每一個人進去的時候都要把門口的牌子翻到「已滿」,出去的時候翻到「可用」。它和互斥鎖的區別立刻就能夠看出來了,翻動的牌子在外面能夠被別人翻的,而鎖住的鎖只有拿鑰匙的人才能夠開!

固然了,信號量之因此翻譯成「信號」,仍是有道理的,由於它(廁所門口的牌子)標示的是資源(廁所空位)的狀態,而互斥鎖就是鎖,它實實在在地鎖住了資源。這在生產者消費者的狀況下區別更明顯。

相關文章
相關標籤/搜索