Latency,中文译做延迟。Throughput,中文译做吞吐量。它们是衡量软件系统的最多见的两个指标。性能优化
延迟通常包括单向延迟(One-way Latency)和往返延迟(Round Trip Latency),实际测量时通常取往返延迟。它的单位通常是ms、s、min、h等。服务器
而吞吐量通常指至关一段时间内测量出来的系统单位时间处理的任务数或事务数(TPS)。注意“至关一段时间”,不是几秒,而多是十几分钟、半个小时、一天、几周甚至几月。它的单位通常是TPS、每单位时间写入磁盘的字节数等。网络
思考一个问题:并发
低延迟必定意味着高吞吐量吗?若是不是,试举出反例。
假若有一个网站系统,客户端每次请求网站服务端,网络传输时间(包括往返)为 200ms,服务端处理请求为10ms。那么若是是同步请求,则延迟为210ms。此时若是提升网络传输速度,好比提升到100ms,那么延迟为110ms。这种状况减小延迟彷佛确实能够必定程度提升吞吐量,缘由主要在于:系统性能瓶颈不在于服务端处理速度,而在于网络传输速度。异步
继续假设将同步请求改成异步请求,那么如今延迟为100ms,延迟下降了,但吞吐量保持不变。因此这是一个反例。wordpress
除了上面这个反例外,还有一个更生动的反例:性能
火车、飞机运煤:
从山西到广州运煤,一列火车100小时(包括往返)能够运输10000t煤,而一架飞机20小时(包括往返)能够运输100t煤
测试
显然飞机运煤的延迟明显低于火车运煤,但若是测试运10000t煤,则火车运煤的吞吐量远高于飞机:优化
咱们能够将上面的运煤场景类比软件系统,火车、飞机运煤能够比做Web服务器处理请求,好比Apache和Nginx。在并发请求数不高时,好比10000(我假设的)如下时,也许Apache的吞吐量可能优于Nginx,但在大于10000时Apache的吞吐量就开始急剧降低,而Nginx的吞吐量相对以前比较稳定。因此比较Web服务器的吞吐量时,必须观察在并发请求数逐渐递增状况下它们各自的表现。网站
根据延迟和吞吐量咱们还能够计算并发度(Concurrency),公式以下:
并发度 = 吞吐量 * 延迟
好比一个任务的处理花费1ms,吞吐量为1000tps,那么并发度就等于1/1000*1000=1,能够得出任务处理线程模型是单线程模型。
又好比一个HDD磁盘的延迟为8ms,但吞吐量能够达到每秒钟写40MB,那么每次磁盘寻道能够写入的数据量为(40*10^6) * (8*10^-3)B = 320,000B = 320KB。
下面的比喻是关于吞吐量(throughput)和延迟(latency)的。若是你要搞网络性能优化,这两个概念是你必需要知道的,它们看似简单实则不是。我相信包括我在内的不少人都曾经认为大的吞吐量就意味着低延迟,高延迟就意味着吞吐量变小。下面的比喻能够解释这种观点根本不对。该比喻来自这里,我来作个大致意译(非逐字翻译)。
咱们能够把网络发送数据包比喻成去街边的 ATM 取钱。每个人从开始使用 ATM 到取钱结束整个过程都须要一分钟,因此这里的延迟是60秒,那吞吐量呢?固然是 1/60 人/秒。如今银行升级了他们的 ATM 机操做系统,每一个人只要30秒就能够完成取款了!延迟是 30秒,吞吐量是 1/30 人/秒。很好理解,但是前面的问题依然存在对不对?别慌,看下面。
由于这附近来取钱的人比较多,如今银行决定在这里增长一台 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.
正如银行为了让客户满意不光要提升自身的办事效率外,还要尽可能缩短客户在银行办事所花的时间同样,操做系统不光要尽可能让网络吞吐量大,并且还要让每一个应用程序发送数据的延迟尽可能小。这是两个不一样的目标。