从Stream javadoc中得知:
流管道可以顺序或并行执行。这种执行模式是流的属性。创建流时可以选择初始的顺序或并行执行。
我的假设:
1.顺序/并行流没有功能上的区别。输出永远不会受到执行模式的影响。
2.并行流总是更可取的,如果有足够的核心数和问题规模来证明其开销,则由于性能增益而优先使用。
3.我们希望编写一次代码,无论硬件如何都可以运行(毕竟这是Java)。
假设这些假设是有效的(对元假设没有什么问题),那么在api中公开执行模式的价值在哪里?
似乎你应该只需声明一个流,顺序/并行执行的选择应该由位于下层的库代码或JVM自动以可用核心数、问题规模等为函数处理。
当然,假设并行流也适用于单核机器,可能始终使用并行流可以实现这一点。但这真的很丑陋—为什么在我的代码中显式引用并行流,而这是默认选项呢?
即使存在一种场景,您想要故意硬编码使用顺序流-为什么没有子接口SequentialStream来实现此目的,而不是在流中污染一个执行模式开关?
流管道可以顺序或并行执行。这种执行模式是流的属性。创建流时可以选择初始的顺序或并行执行。
我的假设:
1.顺序/并行流没有功能上的区别。输出永远不会受到执行模式的影响。
2.并行流总是更可取的,如果有足够的核心数和问题规模来证明其开销,则由于性能增益而优先使用。
3.我们希望编写一次代码,无论硬件如何都可以运行(毕竟这是Java)。
假设这些假设是有效的(对元假设没有什么问题),那么在api中公开执行模式的价值在哪里?
似乎你应该只需声明一个流,顺序/并行执行的选择应该由位于下层的库代码或JVM自动以可用核心数、问题规模等为函数处理。
当然,假设并行流也适用于单核机器,可能始终使用并行流可以实现这一点。但这真的很丑陋—为什么在我的代码中显式引用并行流,而这是默认选项呢?
即使存在一种场景,您想要故意硬编码使用顺序流-为什么没有子接口SequentialStream来实现此目的,而不是在流中污染一个执行模式开关?