Java中並行流和順序流的區別
流 在 Java 8 中引入,幷包含在 java.util.stream 包中。它是一個物件序列,充當 陣列 或集合。流支援多種方法。此外,流還支援各種聚合操作,包括:
- 過濾 (Filter)
- 對映 (Map)
- 歸約 (Reduce)
- 限制 (Limit)
- 匹配 (Match)
- 查詢 (Find)
對流執行任何這些操作都不會影響源。相反,會建立一個新的流來應用這些操作。流有兩種型別:順序流和並行流。在本文中,我們將討論並行流和順序流之間的區別。
什麼是順序流?
順序流使用單個執行緒來處理管道。順序流的物件位於同一處理系統上,並排成同一流。因此,多核系統不會用於處理。
什麼是並行流?
並行流使用多核處理器,這有助於提高程式的效能。程式碼透過並行流方法被分成多個流。所有流都在不同的核心上並行執行。當需要顯示最終結果時,所有核心都會合並。由於執行不受開發人員控制,因此結果可能無序。並行流可以透過以下方式使用:
- 集合介面 包含 parallelStream() 方法,可用於實現並行流。
- BaseStream 介面包含 parallel() 方法,可應用於順序流。
順序流和並行流的區別
Java中的順序流和並行流有很多區別,我們可以在下表中看到。
順序流 | 並行流 |
---|---|
順序流的執行在計算機的單個核心上完成。 | 並行流的執行在計算機的多個核心上完成。 |
順序流的效能較慢。 | 並行流的效能較快。 |
順序流的處理在執行過程中保持順序。 | 並行流的執行過程中不保持順序。 |
一次只能發生一次迭代。 | 由於流在多個核心上執行,因此可以發生多次迭代。 |
每次迭代必須等到前一次迭代執行完成後才能執行。 | 如果所有核心都處於繁忙狀態,則流必須等待,否則它們將同時執行而無需等待。 |
順序流不易出錯。 | 並行流更容易出錯。 |
它不依賴於平臺。 | 它依賴於平臺。 |
結論
Java中的流有兩種型別:順序流和並行流。順序流是在其中對物件的操作按順序執行的流。程式的結果是有序的。它使用計算機的單個核心進行執行。它的效能較慢,但它與平臺無關。並行流使用計算機的多個核心進行執行。此流的效能非常快,但結果並非有序的。
關於順序流與並行流的常見問題
1. 哪種流與平臺無關?
順序流與平臺無關,因為它只使用單個核心來執行程式碼。並行流使用多個核心執行程式碼,因此它與平臺相關。
2. 哪種流更容易出錯?
並行流更容易出錯,因為流在計算機的多個核心上執行。結果不是有序的。順序流出錯的可能性較小,因為它只使用單個核心來執行程式碼。
3. 在順序流和並行流中,迭代何時需要等待?
在順序流中,一次只能工作一個迭代。下一個迭代必須等到當前迭代的執行完成才能執行。在並行流中,迭代在不同的核心上同時工作。如果所有核心都處於繁忙狀態,則迭代必須等待。
4. 哪種流在執行過程中保持順序?
順序流在執行過程中保持順序。這是因為它只使用一個核心,並且每次迭代必須等到當前迭代完成執行。
5. 哪種流的效能更快?
並行流的效能更快,因為它使用多個核心進行執行。順序流只使用一個核心,因此其效能較慢。