Javaモジュールのパフォーマンスをテストするための簡単な負荷テストツールを作成しました。私が直面した問題の1つは、スループット測定のアルゴリズムです。テストは複数のスレッドで実行され(クライアントはテストを繰り返す回数を構成します)、実行時間がログに記録されます。したがって、テストが終了すると、次の履歴があります。
4 test executions
2 threads
36ms overall time
- idle
* test execution
5ms 9ms 4ms 13ms
T1 |-*****-*********-****-*************-|
3ms 6ms 7ms 11ms
T2 |-***-******-*******-***********-----|
<-----------------36ms--------------->
今のところ、次の方法でスループット(1秒あたり)を計算します1000 / overallTime * threadCount
。
しかし、問題があります。1つのスレッドが(何らかの理由で)それ自体のテストをより迅速に完了するとしたらどうでしょうか。
3ms 3ms 3ms 3ms
T1 |-***-***-***-***----------------|
3ms 6ms 7ms 11ms
T2 |-***-******-*******-***********-|
<--------------32ms-------------->
この場合、測定されたスループットは最も遅いスレッドによって制限されるため、実際のスループットははるかに優れています。したがって、私の質問は、マルチスレッド環境でのコード実行のスループットをどのように測定する必要があるかということです。