加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 并行流和CompletableFuture之间的区别

发布时间:2020-12-15 04:31:57 所属栏目:Java 来源:网络整理
导读:在“ Java 8 in action”(Urma,Fusco和Mycroft)一书中,他们强调并行流在内部使用公共的叉连接池,而这可以在全局配置,例如,使用System.setProperty(…),它不可能为单个并行流指定值. 我已经看到workaround涉及在定制的ForkJoinPool中运行并行流. 在本书的后面
在“ Java 8 in action”(Urma,Fusco和Mycroft)一书中,他们强调并行流在内部使用公共的叉连接池,而这可以在全局配置,例如,使用System.setProperty(…),它不可能为单个并行流指定值.

我已经看到workaround涉及在定制的ForkJoinPool中运行并行流.

在本书的后面,他们有一整章致力于CompletableFuture,在此期间他们有一个案例研究,他们比较使用parallelStream VS和CompletableFuture的各自表现.事实证明它们的性能非常相似 – 它们强调了这一点的原因是它们都是默认使用相同的公共池(因此相同数量的线程).

他们继续展示解决方案并争辩说CompletableFuture在这种情况下更好,因为它可以被设置为使用自定义Executor,其用户选择的线程池大小.当他们更新解决方案以利用它时,性能得到显着改善.

这让我想到 – 如果使用上面突出显示的解决方法为并行流版本做同样的事情,性能优势是否会相似,那么这两种方法在性能方面是否会再次相似?在这种情况下,为什么人们会选择CompletableFuture而不是并行流,因为它显然需要开发人员更多的工作.

解决方法

In this case,why would one choose the CompletableFuture over the parallel stream when it clearly takes more work on the developer’s part.

恕我直言这取决于您希望支持的界面.如果您希望支持异步API,例如

CompletableFuture<String> downloadHttp(URL url);

在这种情况下,只有可完成的未来才有意义,因为您可能希望在等待数据下降时执行其他不相关的操作.

另一方面,parallelStream()最适合CPU绑定任务,您希望每个任务执行某些工作的一部分.即每个线程使用不同的数据做同样的事情.你的意思是它也更容易使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读