异步http客户端(ning)创建更多线程?

时间:2012-05-07 17:45:36

标签: java http asynchronous ning

我正在使用ning异步http客户端来实现非阻塞性优势。做一个苹果对苹果测试(非阻塞与阻塞),我发现非阻塞版本正在提供更多的请求样本,但异步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连接都有一个线程,可以在异步http客户端的I / O完成时触发回调。

1 个答案:

答案 0 :(得分:11)

2015年11月16日编辑

看起来回购已经移动了。请参阅this line,您可以在其中更改使用的ThreadFactory。如果未设置,则看起来它使用默认值。这由ChannelManager here使用。

您也可以在简单的客户端上将其设置为here

删除已删除死链接的原始

快速查看代码 - 看起来应用程序线程池使用的Executor服务是一个缓存的线程池,它根据需要创建线程。您可以使用构建器上的setter设置客户端使用的执行程序服务。