Java 8函數編程輕松入門(五)並行化(parallel)


  • 1.並發與並行的區別

  • 並發: 一個時間段內有幾個程序都處於已啟動到運行完畢之間,且這幾個程序都是在同一個處理機上運行。但在任一個時刻點只有一個程序在處理機上運行

  • 並行: 在同一個時刻,多核處理多個任務。把工作拆分,同時在多核CPU上執行

  • 2.parallelStream及parallel

  • 在C#中,有Parallel類提供並行編程,同樣在Java 8中針對Stream,Java 8也提供了parallelStream並行化編程。

  • 2.1C#的Parallel

static void Main(string[] args)
    {
        List<int> array = new List<int> { 1, 2, 3, 4, 5 };
        Parallel.ForEach(array, Console.WriteLine);
        Console.ReadKey();
    }
  • 2.2Java 8的parallelStream

public static void main(String[] args) {
    List<Integer> array = new ArrayList<Integer>() {{
        add(1);
        add(2);
        add(3);
        add(4);
        add(5);
    }};
    array.stream().forEach(u -> System.out.print(u + ","));//按照正常順序輸出 1,2,3,4,5,
    System.out.println("----------parallel執行分割線------------");
    array.parallelStream().forEach(u -> System.out.print(u + ","));//隨機輸出 3,5,4,1,2,
}
  • 3.影響並行流的主要五個因素

  • 3.1數據大小

  • 輸入數據的大小會影響並行化處理,當只有足夠大、每個數據處理管道花費的時間足夠多時,並行化才有意義

  • 3.2源數據結構

  • 一般都是基於集合進行並行化

  • 3.3裝箱

  • 處理基本類型比處理裝箱類型要快

  • 3.4核的數量

  • 只有在多核的機器上使用才有意義,並且是運行時能夠使用的多少核

  • 3.5單元處理開銷

  • 原先處理耗時較長,使用並行化才有意義

  • 4.總結

  • 通過5篇文章的講解及對照C#來看,我們大致能將Java 8函數式編程弄明白。

  • 對我而言,Java 8的函數式編程類似C#提供的Lambda。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM