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
, DoubleStream
Fork
가 되지 않을 수 있습니다.ExecutorService
의 구현체인 ForkJoinPool
을 통해 스레드를 관리합니다.