シングル コア マシンは 1 つのスレッドしか実行できないという仮定から始めています。今、20 のスレッドを生成し、BigDecimal を使用して多数の階乗を計算する Java/Spring ベースの junit テストを作成しました。
Visual VM でその junit を監視したところ、20 個のスレッドすべてが動作していることを確認でき、Visual VM で実行中 (緑) として表示されます。私が理解しているように、jvm はそれらがすべて実行されているように見えますが、非常に細かいレベルでは、各スレッドが CPU サイクルを順番に処理します。すべてのスレッドが互いに干渉し、CPU があるスレッドから別のスレッドに切り替わることを視覚的または数値で証明する方法またはツールはありますか? つまり、特定の関数を実行する特定の数のスレッドについて、CPU による極端なコンテキストの切り替えによる飽和点または収益の減少を確認したいと考えています。
私が解決しなければならない実際の問題は、大規模な Java アプリケーションでスレッドを調整することです。サンプルの実行でスレッドの競合が見られない場合は、大規模なアプリケーションでもスレッドの競合や乱用を確認できません。