我写了简单 负载测试工具 用于测试Java模块的性能。我面临的一个问题是吞吐量测量的算法。测试在多个线程中执行(客户端配置应重复多少次测试),并记录执行时间。因此,测试完成后,我们将有以下历史记录:

4 test executions
2 threads
36ms overall time

- idle
* test execution
       5ms    9ms     4ms      13ms
T1  |-*****-*********-****-*************-|
      3ms  6ms     7ms      11ms
T2  |-***-******-*******-***********-----|
    <-----------------36ms--------------->

目前,我以以下方式计算吞吐量(每秒): 1000 / overallTime * threadCount.

但是有问题。如果一个线程会更快地完成自己的测试(无论出于何种原因)怎么办:

      3ms 3ms 3ms 3ms
T1  |-***-***-***-***----------------|
      3ms  6ms     7ms      11ms
T2  |-***-******-*******-***********-|
    <--------------32ms-------------->

在这种情况下,实际吞吐量要好得多,因为测得的吞吐量是 由最慢的线程界定. 。因此,我的问题是如何在多线程环境中测量代码执行的吞吐量。

有帮助吗?

解决方案

怎么样 throughput[t] = numberOfTests[t] / overallTime[t] 每个线程分开 t, ,然后计算所有的平均值 throughput?

然后,您还可以计算范围和标准偏差之类的内容,以获得更好的图像。我个人非常喜欢 盒子图. 。但是,只有数字本身会很有趣。

其他提示

我知道它有点晚了,但是我有两个与您的问题相关的博客文章。第一个描述 如何测量吞吐量 (和响应时间)。第二 描述一种图形吞吐量的方法.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top