Java AsyncHttpClient是否知道要为所有HTTP请求分配多少线程
我正在评估大负载(~1M HTTP请求)。 对于每个请求,我都希望使用AsyncCompletionHandler调用回调,该回调只会将结果插入阻塞队列 我的问题是:如果在紧密循环中发送异步请求,AsyncHttpClient将使用多少线程?(我知道你可以设置最大值,但显然你会冒着丢失请求的风险,我看到了) 我目前正在将Netty实现用于以下版本: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
- 异步http客户端v1.9.33
- netty v3.10.5.Final
提前感谢AsyncHttpClient客户端(以及其他非阻塞IO客户端),它不需要为每个请求分配线程,并且客户端不需要调整其线程池的大小,即使您用请求轰炸它。如果不使用HTTP保持活动状态或调用多个主机,则可以启动多个连接,但所有连接都可以由单线程客户端处理(可能有多个IO线程,具体取决于实现)
但是,最好限制每个主机的最大请求数和每个域的最大请求数,以避免在特定主机或站点上过载服务,并避免被阻止。这就是HTTP客户端添加
maxConnectionsPerXxx
设置的原因 AHC有两种类型的螺纹:
来源:GitHub上的问题:提示:HTTP请求不一定重复使用相同的连接;)@EranHarel不确定我是否理解了提示,但现在我认为max connections只是指打开的连接数,它不会直接影响线程数(因为一个选择器侦听多个套接字),我的路径正确吗?如果不使用HTTP保持活动,则连接不会被重用,因此,当您向特定主机或域发送多个请求时,您将创建多个连接(每个请求一个)。在某些情况下,您可能会使站点/服务过载,或者在洪水泛滥时被阻塞。这就是客户机具有此设置的原因。无论如何,无论你创建了多少并发请求/连接,netty都不会增加线程的数量。这在我的脑海中肯定会组织得更好。写下来作为答案,我会接受的,谢谢你的帮助