gpt4 book ai didi

java - AsyncHttpClient 是否知道为所有 HTTP 请求分配多少线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:48:14 24 4
gpt4 key购买 nike

我正在评估 AsyncHttpClient对于大负载(~1M HTTP 请求)。对于每个请求,我想使用 AsyncCompletionHandler 调用回调,它只会将结果插入阻塞队列

我的问题是:如果我在紧密循环中发送异步请求,AsyncHttpClient 将使用多少个线程? (我知道你可以设置最大值,但显然你冒着丢失请求的风险,我已经看到了 here )

我目前在这些版本中使用 Netty 实现:

  • async-http-client v1.9.33
  • netty v3.10.5.Final

如果以后的版本有什么优化的话,我不介意使用其他版本

编辑:

我读到 Netty 使用 reactor pattern要对HTTP响应使用react,这意味着它分配了很少的线程作为选择器。这也意味着分配的线程数不会随着请求量的增加而增加。然而,这与设置最大连接数的需要相矛盾。

谁能解释一下我错过了什么?

提前致谢

最佳答案

AsyncHttpClient 客户端(以及其他非阻塞 IO 客户端)不需要为每个请求分配一个线程,并且即使您进行轰炸,客户端也不需要调整其线程池的大小它与请求。如果您不使用 HTTP keep-alive 或调用多个主机,您确实会启动许多连接,但它们都可以由单线程客户端处理(可能有多个 IO 线程,具体取决于实现)。

但是,最好限制每个主机的最大请求数和每个域的最大请求数,以避免特定主机或站点上的服务过载,并避免被阻止。这就是 HTTP 客户端添加 maxConnectionsPerXxx 设置的原因。

关于java - AsyncHttpClient 是否知道为所有 HTTP 请求分配多少线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35431414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com