외부 반복을 내부 반복으로 바꾸면 네이티브 자바 라이브러리가 스트림 요소의 처리를 제어할 수 있다.
자바 7은 쉽게 병렬화를 수행하면서 에러를 최소화할 수 있도록 포크/조인 프레임워크
기능을 제공한다.
7장에서는 스트림으로 데이터 컬렉션 관련 동작을 얼마나 쉽게 병렬로 실행할 수 있는지 다룬다.
스트림 인터페이스를 이용하면 간단하게 요소를 병렬로 처리할 수 있는데, 컬렉션에 parallelStream
을 호출하면 병렬 스트림
이 생성된다.
병렬 스트림은 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할할 스트림이다.
다음은 숫자 n을 인수로 받아서 1 ~ n까지 모든 숫자의 합계를 반환해주는 메서드를 구현한 것이다.
순차 스트림에 parallel 메서드를 호출하면 기존의 함수형 리듀싱 연산이 병렬로 처리된다.
public long parallelSum(long n) {
return Stream.iterate(1L, i -> i + 1)
.limit(n)
.parallel() // 스트림을 병렬 스트림으로 변환
.reduce(0L, Long::Sum);
}
반대로 sequential로 병렬 스트림을 순차 스트림으로 바꿀 수 있다.
성능 최적화를 할 때는 측정이 가장 중요한데, 이를 도와주는 라이브러리들이 있다.
이는 책을 참고하도록 하자.