【发布时间】:2020-03-31 12:55:22
【问题描述】:
以下代码的并行执行比顺序代码花费的时间更长。我知道并行流比顺序流更复杂,也更昂贵,我们不能指望并行流一直都能创造奇迹。我只关心下面的代码
List<Integer> collect = IntStream.rangeClosed(1, 1000000)
.unordered()
.parallel()
.filter(e -> e%7 == 0)
.boxed()
.collect(Collectors.toList());
long endTime = System.nanoTime();
collect.forEach(System.out::println);
System.out.println(endTime - startTime);
输出:
使用顺序流:40 227 795
使用并行流:74 656 768
这个流是有状态的吗? 如果不是,那么为什么并行流需要更长的时间? 这背后的原因是什么? 能有一个准确的猜测吗?
【问题讨论】:
-
1. How do I write a correct micro-benchmark in Java? 2. 并行执行更复杂,它引入了开销,只有当你知道你在做什么,如果任务适合并行处理,它才会得到回报。你不能只是让一些东西并行并期望它更快,这不是事情的运作方式。
标签: java parallel-processing java-stream