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

Java AsyncHttpClient是否知道要为所有HTTP请求分配多少线程,java,multithreading,http,netty,asynchttpclient,Java,Multithreading,Http,Netty,Asynchttpclient,我正在评估大负载(~1M HTTP请求)。 对于每个请求,我都希望使用AsyncCompletionHandler调用回调,该回调只会将结果插入阻塞队列 我的问题是:如果在紧密循环中发送异步请求,AsyncHttpClient将使用多少线程?(我知道你可以设置最大值,但显然你会冒着丢失请求的风险,我看到了) 我目前正在将Netty实现用于以下版本: 异步http客户端v1.9.33 netty v3.10.5.Final 如果在以后的版本中有任何优化,我不介意使用其他版本 编辑: 我读到Ne

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

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

我目前正在将Netty实现用于以下版本:

  • 异步http客户端v1.9.33
  • netty v3.10.5.Final
如果在以后的版本中有任何优化,我不介意使用其他版本

编辑:

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

有人能解释我遗漏了什么吗


提前感谢AsyncHttpClient客户端(以及其他非阻塞IO客户端),它不需要为每个请求分配线程,并且客户端不需要调整其线程池的大小,即使您用请求轰炸它。如果不使用HTTP保持活动状态或调用多个主机,则可以启动多个连接,但所有连接都可以由单线程客户端处理(可能有多个IO线程,具体取决于实现)


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

AHC有两种类型的螺纹:

  • 用于I/O操作。在屏幕上,它是AsyncHttpClient-x-x线程。AHC创建了其中的2个核心编号
  • 暂停。在屏幕上,它是AsyncHttpClient-timer-1-1线程。应仅为一个
  • 正如你提到的:

    只是指未连接的打开连接数 直接影响线程数


    来源:GitHub上的问题:

    提示:HTTP请求不一定重复使用相同的连接;)@EranHarel不确定我是否理解了提示,但现在我认为max connections只是指打开的连接数,它不会直接影响线程数(因为一个选择器侦听多个套接字),我的路径正确吗?如果不使用HTTP保持活动,则连接不会被重用,因此,当您向特定主机或域发送多个请求时,您将创建多个连接(每个请求一个)。在某些情况下,您可能会使站点/服务过载,或者在洪水泛滥时被阻塞。这就是客户机具有此设置的原因。无论如何,无论你创建了多少并发请求/连接,netty都不会增加线程的数量。这在我的脑海中肯定会组织得更好。写下来作为答案,我会接受的,谢谢你的帮助