亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Java 中正確使用并行流

在 Java 中正確使用并行流

素胚勾勒不出你 2022-07-06 19:12:52
我正在用 Java 中的并行流進行試驗,為此我有以下代碼用于計算之前的素數n?;旧衔矣袃煞N方法calNumberOfPrimes(long n)- 4 種不同的變體isPrime(long n)- 2 種不同的變體實際上,我對上述每種方法都有 2 個不同的變體,一個使用并行流的變體,另一個不使用并行流的變體。   // itself uses parallel stream and calls parallel variant isPrime    private static long calNumberOfPrimesPP(long n) {        return LongStream                .rangeClosed(2, n)                .parallel()                .filter(i -> isPrimeParallel(i))                .count();    }    // itself uses parallel stream and calls non-parallel variant isPrime    private static long calNumberOfPrimesPNP(long n) {        return LongStream                .rangeClosed(2, n)                .parallel()                .filter(i -> isPrimeNonParallel(i))                .count();    }    // itself uses non-parallel stream and calls parallel variant isPrime    private static long calNumberOfPrimesNPP(long n) {        return LongStream                .rangeClosed(2, n)                .filter(i -> isPrimeParallel(i))                .count();    }    // itself uses non-parallel stream and calls non-parallel variant isPrime    private static long calNumberOfPrimesNPNP(long n) {        return LongStream                .rangeClosed(2, n)                .filter(i -> isPrimeNonParallel(i))                .count();    }    // uses parallel stream    private static boolean isPrimeParallel(long n) {        return LongStream                .rangeClosed(2, (long) Math.sqrt(n))                .parallel()                .noneMatch(i -> n % i == 0);    }    // uses non-parallel stream    private static boolean isPrimeNonParallel(long n) {        return LongStream                .rangeClosed(2, (long) Math.sqrt(n))                .noneMatch(i -> n % i == 0);    }我試圖找出,和中的哪一個在正確使用并行流的效率方面是最好calNumberOfPrimesPP的calNumberOfPrimesPNP,以及為什么它是最好的。calNumberOfPrimesNPPcalNumberOfPrimesNPNPPS:我知道這不是計算素數的最佳方法。 埃拉托色尼篩法和其他更復雜的方法可以做到這一點。但是通過這個例子,我只想了解并行流的行為以及何時使用它們。
查看完整描述

1 回答

?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

我認為,很明顯,為什么 NPP 如此緩慢。


將結果數字排列在表格中:


       |    _P    |   _NP

-------+----------+---------

  P_   |   2364   |   265

-------+----------+---------

  NP_  |  11424   |  1138

-------+----------+---------

所以你看到當外部流是并行的時候它總是更快。這是因為流中有很多工作要做。因此,與要完成的工作相比,處理并行流的額外開銷很低。


您還看到,當內部流不并行時,它總是更快。isPrimeNonParallel比 快isPrimeParallel。這是因為流中沒有太多工作要做。在大多數情況下,經過幾步之后就可以清楚地知道該數字不是素數。一半的數字是偶數(只有一步)。與要完成的工作相比,處理并行流的額外開銷很高。


查看完整回答
反對 回復 2022-07-06
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號