gpt4 book ai didi

java - Java 8 `Stream` 可以在您不要求的情况下并行吗?

转载 作者:IT老高 更新时间:2023-10-28 20:53:41 26 4
gpt4 key购买 nike

如我所见,显而易见的代码,在使用 Java 8 Stream 时,无论是“对象”流还是原始流(即 IntStream 和 friend ) ) 将只是使用:

someStreamableResource.stream().whatever()

但是,相当多的“可流式资源”也有.parallelStream()

阅读 javadoc 时不清楚的是 .stream() 流是否始终是顺序的,以及 .parallelStream() 流是否始终是并行的...

然后是Spliterator,尤其是它的.characteristics() , 其中之一是它可以是 CONCURRENT ,甚至IMMUTABLE .

我的直觉是,事实上,Stream 是否可以默认并行或完全并行,取决于其底层 Spliterator。 ..

我在正确的轨道上吗?我已经阅读并再次阅读了 javadocs,但仍然无法对这个问题给出明确的答案......

最佳答案

首先,通过规范的镜头。流是并行还是顺序流是流状态的一部分。流创建方法应该指定它们是创建顺序流还是并行流(JDK 中的大多数都这样做),但它们不需要这么说。如果您的流源没有说,请不要假设。如果有人传给你一条信息流,不要假设。

允许并行流自行决定退回到顺序(因为顺序实现并行实现,只是一个可能不完美的实现);反之则不然。

现在,通过实现的镜头。在 Collections 和其他 JDK 类中的流创建方法中,我们坚持“创建顺序流,除非用户明确要求并行”的原则。 (但是,其他库会做出不同的选择。如果他们有礼貌,他们会指定他们的行为。)

流并行和Spliterator之间的关系只有一个方向。 Spliterator 可以拒绝拆分——实际上是拒绝任何并行性——但它不能要求客户端拆分它。所以一个不合作的 Spliterator 可以破坏并行性,但不能确定它。

关于java - Java 8 `Stream` 可以在您不要求的情况下并行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27934587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com