Does AsyncHttpClient knows how many threads to allocate for all the HTTP requests

青春壹個敷衍的年華 提交于 2019-12-21 01:19:17

问题


I'm evaluating AsyncHttpClient for big loads (~1M HTTP requests). For each request I would like to invoke a callback using the AsyncCompletionHandler which will just insert the result into a blocking queue

My question is: if I'm sending asynchronous requests in a tight loop, how many threads will the AsyncHttpClient use? (I know you can set the max but apparently you take a risk of losing requests, I've seen it here)

I'm currently using the Netty implementation with these versions:

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

I don't mind using other versions if there are any optimization in later versions

EDIT:

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. This also means that the number of allocated threads doesn't increase with high requests volume. However that contradicts the need to set the max number of connections.

Can anyone explain what I'm missing?

Thanks in advance


回答1:


The AsyncHttpClient client (and other non-blocking IO clients for the matter), don't need to allocate a thread per request, and the client need not resize its thread pool even if you bombard it with requests. You do initiate many connections if you don't use HTTP keep-alive, or call multiple hosts, but it can all be handled by a single threaded client (there may be more than one IO thread, depending on the implementation).

However, it's always a good idea to limit the max requests per host, and max requests per domain, to avoid overloading a service on a specific host, or a site, and avoid getting blocked. This is why HTTP clients add a maxConnectionsPerXxx setting.




回答2:


AHC has two types of threads:

  1. For I/O operation. On your screen, it's AsyncHttpClient-x-x threads. AHC creates 2*core_number of those.
  2. For timeouts. On your screen, it's AsyncHttpClient-timer-1-1 thread. Should be only one.

And as you mentioned:

maxConnections just means number of open connections which does not directly affect the number of threads

Source: issue on GitHub: https://github.com/AsyncHttpClient/async-http-client/issues/1658



来源:https://stackoverflow.com/questions/35431414/does-asynchttpclient-knows-how-many-threads-to-allocate-for-all-the-http-request

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!