我正在评估AsyncHttpClient的大负载(~1M HTTP请求)。 对于每个请求,我想使用AsyncCompletionHandler调用回调,它只是将结果插入阻塞队列
我的问题是:如果我在紧密循环中发送异步请求,AsyncHttpClient将使用多少个线程? (我知道你可以设置最大值,但显然你冒了丢失请求的风险,我已经看过了here)
我目前正在使用这些版本的Netty实现:
如果在以后的版本中有任何优化,我不介意使用其他版本
编辑:
我读到Netty使用reactor pattern来响应HTTP响应,这意味着它分配了很少的线程来充当选择器。这也意味着分配的线程数不会随着请求量的增加而增加。但是,这与设置最大连接数的需要相矛盾。
任何人都可以解释我错过的内容吗?
提前致谢
答案 0 :(得分:6)
AsyncHttpClient
客户端(以及其他非阻塞IO客户端)不需要为每个请求分配一个线程,即使你用请求轰炸它,客户端也不需要调整其线程池的大小。如果不使用HTTP keep-alive或调用多个主机,则会启动许多连接,但它们都可以由单个线程客户端处理(可能有多个IO线程,具体取决于实现)。
但是,限制每个主机的最大请求数和每个域的最大请求数总是一个好主意,以避免特定主机或站点上的服务过载,并避免被阻止。这就是HTTP客户端添加maxConnectionsPerXxx
设置的原因。
答案 1 :(得分:0)
AHC有两种类型的线程:
正如您提到的:
maxConnections仅表示打开的连接数,而没有 直接影响线程数
来源:在GitHub上发布的问题:https://github.com/AsyncHttpClient/async-http-client/issues/1658