並非使用多線程並行流處理數據的性能一定高於單線程順序流的性能,因為性能受到多種因素的影響。
如何高效使用並發流的一些建議:
1. 如果不確定, 就自己測試。
2. 盡量使用基本類型的流 IntStream, LongStream, and DoubleStream
3. 有些操作使用並發流的性能會比順序流的性能更差,比如limit,findFirst , 依賴元素順序的操作在並發流中是極其消耗性能的 。findAny的性能就會好很多,應為不依賴順序。
4. 考慮流中計算的性能(Q)和操作的性能(N)的對比, Q表示單個處理所需的時間, N表示需要處理的數量,如果Q的值越大, 使用並發流的性能就會越高。
5. 數據量不大時使用並發流,性能得不到提升。
6.考慮數據結構:並發流需要對數據進行分解,不同的數據結構被分解的性能時不一樣的。
流的可分解性
|
|||||||||||||||
7. 流的特性以及中間操作對流的修改都會對數據對分解性能造成影響。 比如固定大小的流在任務分解的時候就可以平均分配,但是如果有filter操作,那么流就不能預先知道在這個操作后還會剩余多少元素。
8. 考慮最終操作的性能:如果最終操作在合並並發流的計算結果時的性能消耗太大,那么使用並發流提升的性能就會得不償失。