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),别人是没法打开厕所门的。
而信号量究竟是什么呢?它就是一个大的公共厕所,里面有若干个位置,外面的大门口有一个能够翻动牌子写着“已满”和“可用”,当里面还有空的位置的时候,进去的人不用翻动这个牌子,直到没有位置时最后一个进去的人必须把它设成“已满”,这时后面的人必须排队等候,而后出去的人必须把牌子翻到“可用”,若是须要的话。
很好理解对嘛?那么它怎么解释二元信号量呢?也就是当这个厕所里面只能容纳一我的的时候,每一个人进去的时候都要把门口的牌子翻到“已满”,出去的时候翻到“可用”。它和互斥锁的区别立刻就能够看出来了,翻动的牌子在外面能够被别人翻的,而锁住的锁只有拿钥匙的人才能够开!
固然了,信号量之因此翻译成“信号”,仍是有道理的,由于它(厕所门口的牌子)标示的是资源(厕所空位)的状态,而互斥锁就是锁,它实实在在地锁住了资源。这在生产者消费者的状况下区别更明显。