【问题标题】:Async http client (ning) creating more threads?异步http客户端(宁)创建更多线程?
【发布时间】:2012-05-07 17:45:36
【问题描述】:

我正在使用ning async 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 完成时的回调。

【问题讨论】:

    标签: java http asynchronous ning


    【解决方案1】:

    2015 年 11 月 16 日编辑

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

    你也可以在简单的客户端上设置,如here

    已删除无效链接的原始文件

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

    【讨论】:

    猜你喜欢
    • 2012-10-29
    • 1970-01-01
    • 2017-12-15
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多