Java并行流使用与否
在Java中使用executor服务的并行流检查被认为是一种不好的做法吗?为什么? 正如您所知,Java并行流使用与否,java,parallel-processing,java-stream,Java,Parallel Processing,Java Stream,在Java中使用executor服务的并行流检查被认为是一种不好的做法吗?为什么? 正如您所知,myList.parallelStream().map(e->…)将在引擎盖下使用ForkJoinPool.common()。因此,如果您同时使用至少两个并行流,您可能会遇到以下问题: map功能被阻塞。但作为一种营救,这是有必要的 map函数可能非常占用CPU,这将导致其他并行流耗尽。有没有办法在RecursiveTasks之间或ForkJoinPools之间设置优先级 另一方面,您可以创建任意数量
myList.parallelStream().map(e->…)
将在引擎盖下使用ForkJoinPool.common()
。因此,如果您同时使用至少两个并行流,您可能会遇到以下问题:
map
功能被阻塞。但作为一种营救,这是有必要的map
函数可能非常占用CPU,这将导致其他并行流耗尽。有没有办法在RecursiveTask
s之间或ForkJoinPool
s之间设置优先级ForkJoinPool
snew ForkJoinPool(4)。提交(()->myList.parallelStream()…
。在一个JVM上使用多个ForkJoinPool
s是否被认为是性能明智的
更新
使用或不使用并行流=使用或不使用ForkJoinPool,对吗?我发现和链接对于回答最后一个问题非常有用。对于
.parallel()
.Joschua Bloch说:
[…]甚至不要尝试并行化流管道,除非
有充分的理由相信它将保持计算的正确性
并提高其速度。不适当地并行一个流的代价可能是巨大的
程序失败或性能灾难。如果您认为并行性可能
合理,确保代码在并行运行时保持正确,并且要小心
在实际条件下的性能度量。如果您的代码仍然正确
这些实验证明了你对性能提高的怀疑,然后
然后才并行化生产代码中的流
-有效Java第3版,第225页,第28项:使流并行时要小心
他建议您在实际情况下进行彻底的基准测试,并根据具体情况做出决定。此外,使用.parallel()
不仅会导致性能不佳,还会导致安全故障:
安全故障可能是由于并联使用
映射器、过滤器和其他程序员提供的无法遵循的函数对象
符合他们的规格
-有效Java第3版,第224页,第28项:使流并行时要小心
回答你的问题,这不是一个不好的练习,但是在使用<代码>并行()/代码>时,你应该尽最大的小心,不要盲目地在你的代码库中的每一个流上打它。
这是一个非常有趣的谈话,在“何时考虑使用并行流”的问题上有一些智慧?,由布赖恩·戈茨本人分享。 他将接手本次研讨会的第二部分: Brian Goetz是Oracle的Java语言架构师,也是 JSR-335(Java语言的Lambda表达式)规范负责人 他是畅销书Java的作者 实践中的并发性,以及超过75篇关于Java的文章 从吉米·卡特开始,他就对编程着迷 他是总统是的,可能是重复的,但是除了这些陈述之外,还有什么原因呢?这些建议非常通用,就像没有人知道如何更好一样,让我们每次都进行基准测试。此外,我的问题是关于并行流与执行者服务