Java Stream API:为什么区分顺序和并行执行模式?
流管道可以按顺序执行,也可以并行执行。此执行模式是流的一个属性。创建流时,最初可以选择顺序执行或并行执行。
我的假设:
- 顺序/并行流之间没有功能差异。输出永远不会受到执行模式的影响。
- 由于性能提高,给定适当的内核数量和问题大小来证明开销合理,并行流始终是首选。
- 我们希望一次编写代码,并在任何地方运行,而不必关心硬件(毕竟这是Java)。
假设这些假设是有效的(有点元假设没有错),在api中公开执行模式有什么价值?
看起来你应该能够声明一个,并且顺序/并行执行的选择应该在下面的层中自动处理,无论是通过库代码还是JVM本身作为运行时可用内核的函数,问题的大小等。Stream
当然,假设并行流也可以在单核机器上运行,也许总是使用并行流就可以实现这一目标。但这真的很丑陋 - 为什么在我的代码中有对并行流的显式引用,而它是默认选项?
即使有一种情况,你故意想要硬编码使用顺序流 - 为什么没有一个子接口用于此目的,而不是污染执行模式开关?SequentialStream
Stream