在本书的后面,他们有一整章专门讨论CompletableFuture,在此期间,他们有一个案例研究,在那里他们比较了使用parallelStream和使用CompletableFuture的各自性能。事实证明,它们的性能非常相似--它们强调了这样做的原因,因为它们都是默认的,使用相同的公共池(因此有相同数量的线程)。
他们接着展示了一个解决方案,并认为CompletableFuture在这种情况下更好,因为它可以使用用户选择的线程池大小的自定义执行器。当他们更新解决方案以利用这一点时,性能会显著提高。
这让我思考--如果使用上面强调的解决方案对并行流版本进行同样的操作,性能优势是否会相似,这两种方法是否会因此在性能方面再次变得相似?在这种情况下,为什么要选择CompletableFuture而不是并行流,因为它显然需要开发人员做更多的工作。
在这种情况下,为什么要选择CompletableFuture而不是并行流,因为它显然需要开发人员做更多的工作。
IMHO这取决于您希望支持的接口。如果您希望支持异步API,例如。
CompletableFuture<String> downloadHttp(URL url);
在这种情况下,只有一个完整的未来才有意义,因为在等待数据下来的时候,您可能想做一些其他无关的事情。
本文向大家介绍说说并发与并行的区别?相关面试题,主要包含被问及说说并发与并行的区别?时的应答技巧和注意事项,需要的朋友参考一下 并行:多个处理器或多核处理器同时处理多个任务。 并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是同时执行。
所以如果有谁能解释或指向我这样的博客或文章,那对我真的是好事。
在Java8中,有两种启动异步计算的方法-和。这两者看起来相当相似-的内部类甚至扩展了。 有理由用一个代替另一个吗? 我看到的一个关键区别是,方法只是阻塞,直到将来完成(只是使用旋转),而可以从队列中窃取工作,以帮助您加入的任务完成。 有没有比这一个或那一个更好的好处?
问题内容: 在我的机器上,以下程序打印: 我不清楚为什么串行执行程序要比并行执行程序快。我把这两个程序放在相对安静的盒子上。有人可以澄清发生了什么吗? 问题答案: 尽管Brian Goetz对您的设置是正确的,例如,您应该使用而不是,并且您的基准测试方法非常简单,但我想强调以下要点: 即使解决了这些问题,甚至使用挂钟和TaskManager也可以看到有问题。在我的机器上,该操作大约需要半分钟,并且
问题内容: 与使用CompletableFuture相比,直接将代码传递给线程有什么好处? VS 问题答案: 在受 管理 的forkJoin-Pool中运行Runnable ,同时创建一个 必须管理 的新线程。 “受管理” 是什么意思,它是预先分配的,线程在JVM中共享。当可运行对象完成时,该线程可重用于其他可运行对象。这样可以更好地利用资源,尤其是因为线程实例化是一项昂贵的操作- 不仅必须分配对
问题内容: 我无法理解)和之间的区别。 那么,有人可以提供有效的用例吗? 从Java文档中: 返回一个新值,当此阶段正常完成时,将使用该阶段的结果作为所提供函数的参数来执行该操作。 返回一个新值,当此阶段正常完成时,将以该阶段作为所提供函数的参数来执行此操作。 我得到扩展的CompletionStage 的第二个参数,而没有扩展。 有人可以提供一个例子,说明我必须在什么情况下使用以及何时使用? 问