6

私は、非ブロッキングの良さを実現するために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接続にスレッドがあることです。

4

1 に答える 1

12

編集 11/16/2015

リポジトリが移動したようです。使用する ThreadFactory を変更できるこの行を参照してください。これが設定されていない場合、デフォルトのものを使用しているように見えます。これは、ここで ChannelManager によって使用されます。

ここに見られるように、シンプルなクライアントに設定することもできます

デッドリンクを削除したオリジナル

コードをざっと見てみると、アプリケーション スレッド プールは、必要に応じてスレッドを作成する、キャッシュされたスレッド プールである Executor サービスを使用しているようです。ビルダーのセッターを使用して、クライアントが使用するエグゼキューター サービスを設定できます。

于 2012-05-07T17:57:02.707 に答える