java - 这段代码开了并行为什么变慢了?
高洛峰
高洛峰 2017-04-17 17:48:22
0
1
470

开了并行需要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类的缘故吗?望指教!

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

모든 응답 (1)
刘奇

开了并行之后需要对原数组进行分块,在每块内执行累加,然后再合并,这些额外操作都是需要时间的。而累加本身就是线性运算非常高效。所以,如果并行的数据不够大,或者参数(比如任务数等)设置不合理,反而不如原来效率高

    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!