テストのロジックは比較的単純で、Node がデータベースにアクセスしてデータをクエリします。SQL ステートメントの実行時間は約 2 秒です。JMeter を使用してマルチスレッド テストを実行しました (5 スレッド) )、結果は予想どおりでした (ノードの非ブロッキング機能によると)。5 つのスレッドが同時に 2 秒で結果を返す必要がありますが、結果は次のようになります:
結果によると、ノードはシリアルに実行されており、予想される結果と矛盾しています。誰か説明できますか
@Biancheng 氏によると、その理由は、複数の SQL ステートメントが同じ接続を使用しているためです。現在、コードが変更され、データベース接続プールが使用されています。実行結果は次のとおりです:
#コードは以下のように表示されます:
時間の開始はクエリの前であり、終了はクエリの完了時であるため、それぞれの時間はクエリが実行されている時間になります。
ノードは非同期ですが、同じ接続を使用しています。接続自体をキューに入れる必要がありますか?私の知る限り、同じ接続内のほとんどのデータベースによって実行される SQL はキューに入れられ、次々に実行されます。複数の接続が並列される場合があります。