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

将ForkJoinPool与AsyncHttpClient一起使用-这有意义吗?

佟涵畅
2023-03-14

我的问题与这个关于ForkJoinPool和面向IO的操作的问题有些相关,但它稍微更一般(我链接到的问题没有得到明确的答案)。简而言之 - 如果我想并行发送许多HTTP请求,并且已经使用异步HTTP客户端(例如AsyncHttpClient),那么使用ForkJoinPool并行提交请求是否有意义?

最初,我认为这样做违背了使用异步HTTP客户端的目的,该客户端已经可以并行发送请求。然而,阅读这个关于ForkJoinPool的相关问题,其中提到ForkJoinPool可能会提高性能,即使“所有任务都是异步的并提交到池而不是分叉的”,这让我怀疑我对Java中异步操作如何工作的理解,以及它们应该如何执行。在我的情况下使用ForkJoinPool还有优势吗,如果是这样,怎么会这样?

我还读过关于如何在Java中并行发送HTTP请求的问题,所有答案都提到使用ExecutorService或AsyncHttpClient,但没有任何答案同时提到这两个。

共有1个答案

钦英发
2023-03-14

它们是正交的概念,所以这就是为什么你看不到它们在相同的答案中被提及。

< code>AsyncHttpClient的目标是(除其他外)使用单线程进行所有网络通信(由Netty通过Java的NIO以非阻塞异步方式在内部执行),而不是传统的每请求线程模型。在网络层的单个线程之上,该库具有执行对< code>AsyncHttpClient的用户可见的应用级异步处理的工作线程,这意味着它已经具有(小的)内部线程池。

ForkJoinPool致力于通过拥有许多线程(公共池默认具有CPU内核 - 1,您创建的线程可以具有更多/更少的内核)和通过工作窃取来最大化CPU使用率,因此线程不会空闲,这在小型递归任务中效率最高。

该链接讨论了工作窃取对于非递归任务也是有效的。“async”这个词把你抛到了一边,但它只是指你提交给池的一个常规任务,它异步完成。

因此,您可以使用线程池执行每个请求的线程(即基本I/O或“旧I/O”),或者您可以使用没有线程池的单线程非阻塞NIO(即新I/O)。

把它们结合起来没有意义。您可以从每个请求的线程模型迁移到非阻塞模型,以提高性能

 类似资料:
  • 问题内容: 我们已经成功地使用pm2在服务器上运行应用程序。我们目前正在迁移至docker,我们看到了http://pm2.keymetrics.io/docs/usage/docker- pm2-nodejs/ 但是,将两者一起使用的意义何在?码头工人不提供pm2所做的一切吗? 问题答案: 通常在docker内部使用pm2是没有意义的。 PM2和Docker都是流程管理器,它们都可以执行日志转发

  • 我正在考虑使用perl6和Cro来建立一个包含文本内容的网站。是否有关于将Cro与TT2等模板工具包和代码示例一起使用的最佳实践/指导供我参考?

  • 我遇到了一些哈希代码函数,它具有以下功能: 我不完全相信用于计算hashCode的方法,我知道使用质数通常会产生更好的分布。但在这个实现中,我并不真的相信是这样的。 例如,假设一个标准的哈希实现,我会错过0到17*31之间的所有桶。 是不是有些微妙的地方我没看出来?

  • 问题内容: 我知道Android 很棒。它使我们能够播放本地文件以及媒体流。而且非常容易使用(例如): 通过调用具有不同参数集的重载,可以设置不同类型的DataSource 。这个函数有一个有趣的原型: 看起来可以用自己的实现完全覆盖。它确实有效: 并在主要代码中: 是的,这很好。但是,如果我尝试音频/ aacp广播流(例如:“ http://111.223.51.8:8005”-它是“ COOL

  • 问题内容: 因此,我一直在为这个(应该是)简单的练习而绞尽脑汁,以使该程序将日期字符串转换为对象,对其进行格式化,并在完成后将其作为字符串再次返回。 这是程序的最后一点,它从文件中获取一小段文本,将其分解为单独的记录,然后将记录分解为单独的数据并将它们分配给个人对象。 我已经在多个位置检查了该代码,并且该代码完全执行了应该执行的操作,直到调用了format函数(该函数抛出)为止。为对象分配了应该分

  • 问题内容: 我想在目录中获取具有特定扩展名的文件列表。在中,我看到了可以做到这一点的方法。 由于我需要特定的扩展名,因此我创建了一个。但是,当我与此一起使用时,出现编译错误。我以为自以来,我应该能够做到这一点。代码如下: 最后一行显示编译错误: 类型的方法不适用于类型的参数 我正在尝试使用,不是。为何编译器无法识别这一点? 如果我编写自己的扩展筛选器,则此方法有效。我宁愿使用而不愿自己写。我究竟做