【发布时间】:2016-05-27 15:56:59
【问题描述】:
我正在评估 AsyncHttpClient 的大负载(约 1M HTTP 请求)。 对于每个请求,我想使用 AsyncCompletionHandler 调用回调,它只会将结果插入到阻塞队列中
我的问题是:如果我在一个紧密的循环中发送异步请求,AsyncHttpClient 将使用多少个线程? (我知道你可以设置最大值,但显然你冒着丢失请求的风险,我见过here)
我目前正在使用这些版本的 Netty 实现:
- async-http-client v1.9.33
- netty v3.10.5.Final
如果以后的版本有任何优化,我不介意使用其他版本
编辑:
I read that Netty uses the reactor pattern for reacting to HTTP responses which means it allocates a very small number of threads to act as selectors.这也意味着分配的线程数不会随着请求量的增加而增加。然而,这与设置最大连接数的需要相矛盾。
谁能解释我错过了什么?
提前致谢
【问题讨论】:
-
提示:HTTP 请求不一定重复使用相同的连接;)
-
@EranHarel 不确定我是否理解提示,但现在我认为最大连接数只是指打开的连接数,它不会直接影响线程数(因为一个选择器监听多个套接字),我我在正确的道路上?
-
当您不使用 HTTP keep-alive 时,连接不会被重用,因此当您向特定主机或域发送许多请求时 - 您将创建许多连接(每个请求一个)。在某些情况下,您可能会使站点/服务超载,或者在洪水泛滥时被阻止。这就是客户端具有此设置的原因。无论如何,无论你创建多少并发请求/连接,netty 都不会增加线程数。
-
这绝对可以更好地组织我的脑海中的事情。把它写成答案,我会接受的,谢谢你的帮助
标签: java multithreading http netty asynchttpclient