没有一个简单的问题,所以我回复了一个帖子。
持续吞吐量
我认为吞吐量是一个流程可以在10秒到一天之间的持续时间内执行的操作数。 (假设您有相当长的时间要赶上整个晚上),我将其衡量为每秒的操作数或每秒的兆字节(MB),但是我认为测试需要运行一秒钟以上才能保持健壮。 较短的测试仍然可以报告X / s的吞吐量,但这可能是不现实的,因为系统被设计为使用缓存和缓冲区主动处理突发事件。 如果仅测试一种行为,则会得到一个数字,该数字假定系统上没有其他东西在运行,并且这些缓冲区的限制并不重要。 当您在执行其他操作的真实计算机上运行真实应用程序时,它们将无法充分利用高速缓存,缓冲区,内存和带宽,您可能无法获得2-3倍的持续吞吐量,更不用说更乐观的突发吞吐量了。 SATA HDD可以报告500 MB /秒的突发吞吐量,但它可能只能达到40 MB / s的持续速度。 运行真实程序时,您可能会希望获得15-25 MB /秒的速度。
潜伏
有两种报告延迟的方法。 单向延迟和往返延迟(或往返时间)。 通常会报告第一个,因为它较少,但是由于两端都需要同步时钟,因此很难准确测量。 因此,您经常测量往返延迟(因为您只能使用一个准确的时钟),并且可能将其减半以推断单向延迟。 我倾向于对实际应用程序的期望感兴趣,并且较高的往返延迟通常是一个更好的指示。
延迟的一种常见度量是取吞吐量的倒数。 尽管这更容易计算,但只能与以这种方式测量的其他测试相比较,因为它只能为您提供最乐观的延迟视图。 例如,如果您通过环回上的TCP异步发送消息,则每秒可能能够发送200万条消息,并且您可能会推断出延迟是每个500 ns的倒数。 如果在每个消息中都放置一个时间戳,您可能会发现发送接收消息之间的典型时间实际上接近20微秒。 您可以从这种差异中推断出什么? 随时有40条(20 us / 500 ns)消息在飞行中。
典型,平均和百分位数延迟
典型的延迟可以通过将各个延迟进行排序,排序并取中间值来计算。 这可能是一个相当乐观的值,但由于它是最低的,所以它可能是您可能希望报告的值。 平均延迟是延迟之和除以计数。 这经常被报道,因为它最容易计算和理解其含义。 因为它考虑了所有值,所以它比典型的延迟更现实。 更为保守的观点是报告延迟百分比,例如90%,99%,99.9%甚至99.99%的延迟。 这是通过对各个延迟进行排序并采用最高的10%,1%,0.1%或0.01%来计算的。 由于这代表了您将在大多数时间获得的延迟,因此是更好的选择。 典型的延迟时间实际上是50%。 比较典型延迟和平均延迟以了解分布的“平坦度”可能很有用。 如果典型延迟和平均延迟在10%以内,则我认为这是相当平坦的。 必须高于此值表示优化性能的机会。 在性能良好的系统中,我寻找90%,99%和99.9%之间的大约2倍的延迟。
延迟的分布通常具有所谓的“胖尾巴”。 每隔一段时间,您将获得比所有其他值都大得多的值。 这些可能会高出10 – 1000倍。 这就是查看平均或百分位数延迟的重要性,因为这些延迟会给您带来麻烦。 典型的等待时间对于确定系统是否可以优化更有用。
报告这些延迟和吞吐量的测试
测试线程亲和力可以带来多大的差异,这就是我所说的回声或ping测试。 一个线程或进程发送一条包含时间戳的短消息。 该服务接收消息并将其发送回去。 原始发件人读取消息,并将消息中的时间戳与读取消息时所用的另一个时间戳进行比较。 区别在于以纳秒(或某些测试中的微秒)为单位测量的延迟
延迟减少不会导致更多的吞吐量吗? 你能用凡人的方式来解释这个概念吗?
有许多技术可以同时改善延迟和吞吐量。 例如使用更快的硬件,优化代码以使其更快。 但是,某些技术只能提高吞吐量或延迟。 例如,使用缓冲,批处理或异步通信(在NIO2中)可以提高吞吐量,但要以等待时间为代价。 相反地,使代码尽可能简单并减少跳数往往会减少等待时间,但可能不会提供高吞吐量。 例如,一次发送一个字节,而不使用缓冲流。 可以以较低的延迟接收每个字节,但吞吐量会受到影响。
你能用凡人的方式来解释这个概念吗?
简单来说,延迟是每个动作的时间,吞吐量是每个时间的动作数。
我使用的另一个概念是数量“运行中”或“并发度”,即并发=吞吐量*延迟 。
并发度示例
如果任务花费1毫秒并且吞吐量为每秒1,000,则并发度为1(1/1000 * 1000)。 换句话说,任务是单线程的。
如果一项任务花费20微秒,并且吞吐量为每秒2百万条消息,则“进行中”的数目为40(2e6 * 20e-6)
如果HDD的延迟为8毫秒,但可以写入40 MB / s,则每次搜索写入的数据量约为320 KB(40e6 B / s * 8e-3 s = 3.2e5 B)
参考: 什么是延迟,吞吐量和并发度? 来自我们的JCG合作伙伴 Peter Lawrey,来自Vanilla Java博客。
翻译自: https://www.javacodegeeks.com/2012/05/latency-throughput-and-degree-of.html