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

并行流与CompletableFuture的区别

锺离辰沛
2023-03-14

在本书的后面,他们有一整章专门讨论CompletableFuture,在此期间,他们有一个案例研究,在那里他们比较了使用parallelStream和使用CompletableFuture的各自性能。事实证明,它们的性能非常相似--它们强调了这样做的原因,因为它们都是默认的,使用相同的公共池(因此有相同数量的线程)。

他们接着展示了一个解决方案,并认为CompletableFuture在这种情况下更好,因为它可以使用用户选择的线程池大小的自定义执行器。当他们更新解决方案以利用这一点时,性能会显著提高。

这让我思考--如果使用上面强调的解决方案对并行流版本进行同样的操作,性能优势是否会相似,这两种方法是否会因此在性能方面再次变得相似?在这种情况下,为什么要选择CompletableFuture而不是并行流,因为它显然需要开发人员做更多的工作。

共有1个答案

薛云瀚
2023-03-14

在这种情况下,为什么要选择CompletableFuture而不是并行流,因为它显然需要开发人员做更多的工作。

IMHO这取决于您希望支持的接口。如果您希望支持异步API,例如。

CompletableFuture<String> downloadHttp(URL url);

在这种情况下,只有一个完整的未来才有意义,因为在等待数据下来的时候,您可能想做一些其他无关的事情。

 类似资料:
  • 本文向大家介绍说说并发与并行的区别?相关面试题,主要包含被问及说说并发与并行的区别?时的应答技巧和注意事项,需要的朋友参考一下 并行:多个处理器或多核处理器同时处理多个任务。 并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。

  • 所以如果有谁能解释或指向我这样的博客或文章,那对我真的是好事。

  • 在Java8中,有两种启动异步计算的方法-和。这两者看起来相当相似-的内部类甚至扩展了。 有理由用一个代替另一个吗? 我看到的一个关键区别是,方法只是阻塞,直到将来完成(只是使用旋转),而可以从队列中窃取工作,以帮助您加入的任务完成。 有没有比这一个或那一个更好的好处?

  • 问题内容: 在我的机器上,以下程序打印: 我不清楚为什么串行执行程序要比并行执行程序快。我把这两个程序放在相对安静的盒子上。有人可以澄清发生了什么吗? 问题答案: 尽管Brian Goetz对您的设置是正确的,例如,您应该使用而不是,并且您的基准测试方法非常简单,但我想强调以下要点: 即使解决了这些问题,甚至使用挂钟和TaskManager也可以看到有问题。在我的机器上,该操作大约需要半分钟,并且

  • 在讲解并发概念时,总会涉及另外一个概念并行。下面让我们来了解并发和并行之间的区别。 并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。 并行(parallelism):把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。 并发不是并行。并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是同时做很多事情,而并发

  • 问题内容: 与使用CompletableFuture相比,直接将代码传递给线程有什么好处? VS 问题答案: 在受 管理 的forkJoin-Pool中运行Runnable ,同时创建一个 必须管理 的新线程。 “受管理” 是什么意思,它是预先分配的,线程在JVM中共享。当可运行对象完成时,该线程可重用于其他可运行对象。这样可以更好地利用资源,尤其是因为线程实例化是一项昂贵的操作- 不仅必须分配对