2021/03/18

[筆記] Effective Java #48 謹慎使用 Stream 並行

Effective Java 3rd 簡體中文版筆記 #48 謹慎使用 Stream 並行
隨著 Java 的演進,平行化的使用越來越方便,但撰寫出正確又高平行化的程式並不容易,雖然在 Stream API 中提供 parallel() 來進行平行化,但在調用後不一定會比較快,而且還有可能會發生錯誤。ArrayListHashMapHashSetConcurrentHashMap,陣列、有範圍的 IntStreamLongStream 等,在 Stream 上使用平行化,可以達到較好的效果。以上的資料結構的共通性是,它們都可以輕鬆地被分成任意大小的子範圍,讓多個 thread 可以分工。Stream 用來執行這個工作的是分割迭代器 (spliterator)

Stream pipeline 的終止操作也會影響平行化的效能,如果大量的工作在終止操作中執行,而非在 pipeline 中執行,或是某個操作是固有的順序,都會影響平行化的效能。終止操作中的 mincountanyMatchallMatch 等都是比較好的操作,collect 就是比較不好的終止操作。在平行化 Stream 時,在改變前後需進行測試,確定優化是可行且需要的。

轉載請註明原文網址 https://cookieandcoketw.blogspot.com/2021/03/effective-java-48-stream-parallel.html

沒有留言:

張貼留言