1월, 2017의 게시물 표시

ParallelStream 효과적으로 사용하기

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