【发布时间】:2015-02-12 10:54:54
【问题描述】:
我有两个函数可以解决同一个问题。 第一个使用顺序流,第二个使用并行流。
public static int digitalRoot(int n) {
int sum = String.valueOf(n).chars().map(i -> Integer.parseInt(String.valueOf((char) i))).sum();
if (sum >= 10) {
return digitalRoot(sum);
} else {
return sum;
}
}
public static int digitalRootParallel(int n) {
int sum = String.valueOf(n).chars().parallel().
map(i -> Integer.parseInt(String.valueOf((char) i))).sum();
if (sum >= 10) {
return digitalRootParallel(sum);
} else {
return sum;
}
}
我执行了一次这些功能。 并行函数 digitalRootParallel() 比顺序函数 (32 ms) 更快 (5 ms) digitalRoot()。
但是当我在 1.000.000 的循环中执行它们时,顺序 (117 ms) 比并行 (1124 ms) 快。
for (int i = 0; i < 1000000; i++) {
sum = digitalRoot(n);
}
为什么带有并行流的循环更慢?
【问题讨论】:
标签: java java-8 java-stream