Я написал простой инструмент для нагрузочного тестирования для тестирования производительности модулей 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-------------->
В этом случае фактическая пропускная способность намного лучше, поскольку измеренная пропускная способность ограничена
самая медленная нить . Итак, мой вопрос: как мне измерить пропускную способность выполнения кода в многопоточной среде?