Stream 은 Java 8 에 추가된 Lambda 활용할 수 있는 기술 중 하나로, 연속된 요소의 집합 입니다. 기본적으로 순차처리 되지만, parallelStream() 을 통해 병렬 처리를 할 수 있습니다.
Stream 의 특징
Stream 의 병렬 처리는
데이터 병렬성을 구현한 것으로, 내부적으로는Fork-Join Framework를 이용합니다. 그리고 비지니스 로직에 대한 이해가 있어야만 적절하게 사용할 수 있습니다.
요소당 처리 시간Thread Pool 과 Thread 생성의 오버헤드보다 커야 합니다.findAny(), allMatch(), noneMatch()limit(), findFirst(), distinct()unordered() 를 통해 빠른 연산이 가능합니다.Fork 에 적절한 소스Spliterator() 를 적절히 구현할 수 있는 경우Join 과정에서 서로 다른 스레드의 reduce() 연산이 일어납니다.Boxing(), UnBoxing() 의 낭비를 막을 수 있습니다.IntStream, LongStream, DoubleStreamFork 가 되지 않을 수 있습니다.ExecutorService 의 구현체인 ForkJoinPool 을 통해 스레드를 관리합니다.