我编写了简单的负载测试工具来测试 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-------------->
在这种情况下,实际吞吐量要好得多,因为测量的吞吐量受最慢线程的限制。所以,我的问题是我应该如何测量多线程环境中代码执行的吞吐量。