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

Java 异步http客户端(ning)创建更多线程?,java,http,asynchronous,ning,Java,Http,Asynchronous,Ning,我正在使用异步http客户机来实现无阻塞功能。在进行Apple vs Apple测试(非阻塞vs阻塞)时,我发现非阻塞版本提供了更多的请求样本,但是异步http客户机创建的线程比其阻塞对应的多。这是我期待的还是我错过了什么 以下是压力测试的数据 Async Http Client jMeter - 2 threads, 120 seconds, 1 sec ramp up Peak threads : 270 Heap usage: 600mb Peak cpu usage: 30% Total

我正在使用异步http客户机来实现无阻塞功能。在进行Apple vs Apple测试(非阻塞vs阻塞)时,我发现非阻塞版本提供了更多的请求样本,但是异步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
我正在创建连接的线程池(重用它们)

这里有我遗漏的东西吗?我试着查看线程转储,看看是什么在创建线程,但没有发现任何有用的东西。
我敢打赌,在异步http客户端中,每个生成的http连接都有一个线程,用于在I/O完成时触发回调。

编辑11/16/2015

看来回购协议已经动了。查看您可以在何处更改使用的ThreadFactory。如果未设置此选项,则看起来它使用的是默认选项。这是由ChannelManager使用的

您还可以在简单客户端上进行设置,如图所示

删除了原始链接和死链接

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

您是否介意在最新版本中更改第160行时再精确一点(比如函数名,在那里可以看到什么)
AsyncHttpClientConfig.Builder builder = new AsyncHttpClientConfig.Builder();
builder.setRequestTimeoutInMs(2000);
builder.setMaximumConnectionsPerHost(10);
builder.setMaximumConnectionsTotal(100);
client = new AsyncHttpClient(builder.build());