我正在使用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 完成时触发回调。