ParallelStream 효과적으로 사용하기
- 순차 스트림을 병령 스트림으로 쉽게 바꿀수 있다. 하지만 언제나 병렬 스트림이 빠른 것은 아니다. 확신이 서지 않는다면 벤치마크를 해보라.
- Boxing, Unboxing을 주의하라. 되도록이면 IntStream, LongStream, DoubleStream을 사용하라.
- 순차 스트림보다 병렬 스트림에서 성능이 떨어지는 연산이 있다. limit, findFirst 등
- 스트림에서 수행하는 전체 파이프라인 연산 비용을 고려하라. 처리해야할 요소수가 N이고 처리하는데 드는 비용을 Q라 하면 전체 처리 비용은 N*Q이다. Q가 높아진다는것은 병렬 스트림으로 성능을 개선할수 있는 가능성이 있음을 의미한다.
- 소량의 데이터를 병렬 스트림으로 처리하는것은 병렬화 과정에서 생기는 부가 비용 때문에 이득이 없다.
- 스트림을 구성하는 자료구조가 적절한지 확인하라. ArrayList가 LinkedList보다 효율적으로 분할할수 있다.
- 스트림의 특성과 파이프라인의 중간 연산이 스트림의 특성을 어떻게 바꾸는지에 따라 분해 과정의 성능이 달라질수 있다. 필터 연산이 있으면 스트림의 길이를 예측할 수 없으므로 효과적인 병렬 처리가 어렵다.
- 최종 연산의 병합 과정 비용을 살펴보라. 병합 과정의 비용이 비싸다면 병렬 스트림으로 얻은 성능의 이익이 상쇄된다.
(ParallelStream이 항상 (Sequantial)Stream보다 빠를까요?라는 질문에 저정도 대답하면 100점)
출처 - 자바8 IN ACTION 237페이지
댓글
댓글 쓰기