开了并行需要17秒左右,把.parallel()去掉后只用5秒左右(i5双核)
public static void main(String[] args)
{
long start = System.currentTimeMillis();
long ret = new Random().longs(0, 10)
.limit(10000 * 10000)
.parallel()
.sum();
long end = System.currentTimeMillis();
System.out.println(ret);
System.out.println("takes " + (end - start) + "ms");
}
}
然后把代码中的stream改成用range而不用random生成随机数流,则是开并行要比不开并行快一倍(300ms:600ms):
public static void main(String[] args)
{
long start = System.currentTimeMillis();
long ret = IntStream.range(0, 1000000000)
.parallel()
.sum();
long end = System.currentTimeMillis();
System.out.println(ret);
System.out.println("takes " + (end - start) + "ms");
}
}
为什么前一个例子开并行会更慢,是random类的缘故吗?望指教!
怪我咯2017-04-17 17:50:22
병렬 처리를 켠 후에는 원래 배열을 블록으로 나누어 각 블록에 축적한 다음 병합해야 합니다. 이러한 추가 작업에는 시간이 걸립니다. 축적 자체는 매우 효율적인 선형 작업입니다. 따라서 병렬 데이터가 충분히 크지 않거나, 매개변수(작업 수 등)를 무리하게 설정하면 원본만큼 효율적이지 않게 됩니다