2012-05-07 3 views
6

Я использую async http-клиент ning, чтобы достичь неблокирующей доброты. Выполняя проверку яблок и яблок (не блокируя против блокировки), я вижу, что неблокирующая версия обслуживает больше образцов запросов, однако клиент async-http создает больше потоков по сравнению с его блокирующей копией. Ожидается ли это или что-то, что мне не хватает?Async http client (ning) создает больше потоков?

Вот числа от стресс-теста

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-соединения создается поток для запуска обратного вызова при завершении ввода-вывода в клиенте async http.

ответ

11

EDIT 11/16/2015

Похоже репо переехал. См. this line, где вы можете изменить используемый ThreadFactory. Если это не задано, похоже, что он использует значение по умолчанию. Это используется ChannelManager here.

Вы также можете установить его на простой клиент, как видно here

ОРИГИНАЛ ж/мертвые ссылки удалены

Быстрый взгляд на код - это выглядит как пул потоков в приложениях использует службу Executor который представляет собой кэшированный пул потоков, который создает потоки по мере необходимости. Вы можете установить службу исполнителя, которую использует ваш клиент, используя установщик в построителе.

+0

Великий, спасибо так много – Vinodh

+0

https://github.com/AsyncHttpClient/async-http-client/blob/master/api/src/main/java/org/asynchttpclient/AsyncHttpClientConfig.java Вы возражали бы, чтобы точно определить строка 160 немного больше (например, имя функции, что посмотреть там), поскольку она изменилась в недавнем выпуске –

+0

Ссылки здесь не работают !!! –