当前位置: 首页 > 知识库问答 >
问题:

AsyncHttpClient知道为所有HTTP请求分配多少线程吗

徐鸿达
2023-03-14

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

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

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

    < li >异步http客户端版本1.9.33 < li>netty v3.10.5.Final

我不介意使用其他版本,如果在以后的版本中有任何优化

编辑:

我了解到Netty使用反应器模式来响应HTTP响应,这意味着它分配很少数量的线程来充当选择器。这也意味着分配的线程数量不会随着请求量的增加而增加。然而,这与设置最大连接数的需要相矛盾。

有人能解释我错过了什么吗?

提前致谢

共有2个答案

柴霖
2023-03-14

AHC有两种类型的Thread:

    < li >对于I/O操作。在您的屏幕上,是AsyncHttpClient-x-x线程。AHC创造了2个核心。 < li >对于超时。在您的屏幕上,它是一个AsyncHttpClient-timer-1-1线程。应该只有一个。

正如你提到的:

max连接仅表示打开的连接数,不会直接影响线程数

来源:GitHub上的问题:https://github.com/AsyncHttpClient/async-http-client/issues/1658

楚天宇
2023-03-14

AsyncHttpClient客户端(以及其他非阻塞IO客户端)不需要为每个请求分配一个线程,即使您大量请求,客户端也不需要调整其线程池的大小。如果不使用HTTP keep alive或调用多个主机,则会启动许多连接,但所有连接都可以由单线程客户端处理(根据实现,可能有多个IO线程)。

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

 类似资料:
  • 我对所有这些异步/多线程lib和本地clojure功能感到迷茫。 我有一个Web服务,它调用外部API,转换它响应,然后回馈给客户端。现在是用Python编写的。我想让每个客户端在单独的线程中执行其请求,这样它们就不会等待彼此完成,或者服务器是异步的。不涉及繁重的计算,只需等待IO。 我原以为使用clojure会很容易,但是我忽略了一些东西...Aleph是异步服务器吧?然而,当我在请求处理程序中

  • 问题内容: 我过去两天一直在尝试构建具有多线程功能的刮板。不知何故我仍然无法管理它。最初,我尝试使用带有线程模块的常规多线程方法,但这并不比使用单个线程快。后来我了解到请求正在阻塞,并且多线程方法并没有真正起作用。因此,我不断研究并发现有关grequests和gevent的信息。现在,我正在使用gevent运行测试,它仍然没有比使用单个线程快。我的编码有误吗? 这是我课程的相关部分: 问题答案:

  • 我有2个微服务(A和B)。 有一个接受POST请求的endpoint。当用户发出发布请求时,会发生以下情况: 服务A从POST请求正文中获取对象并将其存储在数据库中。 服务A将对象转换为不同的对象。新对象通过泽西HTTP客户端发送到服务B。 步骤 2 发生在我创建的 Java 线程池(Executors.new缓存线程池)上。通过在新线程上执行步骤 2,服务 A 的终结点的响应时间不受影响。 但是

  • 问题内容: 我似乎无法让$ httpProvider.interceptors实际进行拦截。我在JSFiddle上创建了一个示例,该示例记录了拦截器运行的时间以及$ http响应成功的时间。在成功返回响应之后,将运行请求拦截器。这似乎有些倒退。 我不能使用transformRequest,因为我需要更改配置中的参数。该部分未显示在示例中。 我正在使用AngularJS 1.1.5 http://j

  • 我已经写了一段时间的iPhone应用程序,发送数据到服务器,接收数据(通过HTTP协议),没有想太多。理论上,我主要熟悉进程,但我不太熟悉的部分是HTTP多部分请求。我知道它的基本结构,但它的核心我不知道。 似乎每当我发送不同于纯文本的东西(如照片,音乐),我必须使用多部分请求。有人能简单地向我解释一下为什么要用它,它的优点是什么吗? 如果我使用它,为什么这样发送照片更好?

  • 本文向大家介绍请说出你所知道的线程同步的方法相关面试题,主要包含被问及请说出你所知道的线程同步的方法时的应答技巧和注意事项,需要的朋友参考一下 考察点:线程同步 wait():使一个线程处于等待状态,并且释放所持有的对象的lock。