私は、非ブロッキングの良さを実現するためにningasynchttpクライアントを使用しています。リンゴとリンゴのテスト(非ブロッキングとブロッキング)を実行すると、非ブロッキングバージョンがより多くのリクエストサンプルを提供していることがわかりますが、非同期httpクライアントはブロッキングの対応するクライアントと比較してより多くのスレッドを作成しています。これは予想されることですか、それとも私が見逃していることですか?
これがストレステストの数値です
Async Http Client
jMeter - 2 threads, 120 seconds, 1 sec ramp up
Peak threads : 270
Heap usage: 600mb
Peak cpu usage: 30%
Total samples: 18228
Blocking version
jMeter - 2 threads, 120 seconds, 1 sec ramp up
Peak threads: 118
heap usage: 260mb
cpu usage: 18%
total samples: 1472
接続のスレッドプールを作成しています(それらを再利用しています)
AsyncHttpClientConfig.Builder builder = new AsyncHttpClientConfig.Builder();
builder.setRequestTimeoutInMs(2000);
builder.setMaximumConnectionsPerHost(10);
builder.setMaximumConnectionsTotal(100);
client = new AsyncHttpClient(builder.build());
ここに欠けているものはありますか?スレッドダンプを調べてスレッドを作成しているものを確認しようとしましたが、有用なものは見つかりませんでした。私の賭けは、非同期httpクライアントでのI / O完了時にコールバックを起動するために、生成される各http接続にスレッドがあることです。