외부 반복을 내부 반복으로 바꾸면 네이티브 자바 라이브러리가 스트림 요소의 처리를 제어할 수 있다.

자바 7은 쉽게 병렬화를 수행하면서 에러를 최소화할 수 있도록 포크/조인 프레임워크기능을 제공한다.

7장에서는 스트림으로 데이터 컬렉션 관련 동작을 얼마나 쉽게 병렬로 실행할 수 있는지 다룬다.


7.1 병렬 스트림

스트림 인터페이스를 이용하면 간단하게 요소를 병렬로 처리할 수 있는데, 컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성된다.

병렬 스트림은 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할할 스트림이다.

다음은 숫자 n을 인수로 받아서 1 ~ n까지 모든 숫자의 합계를 반환해주는 메서드를 구현한 것이다.

7.1.1 순차 스트림을 병렬 스트림으로 변환하기

순차 스트림에 parallel 메서드를 호출하면 기존의 함수형 리듀싱 연산이 병렬로 처리된다.

public long parallelSum(long n) {
	return Stream.iterate(1L, i -> i + 1)
							 .limit(n)
							 .parallel() // 스트림을 병렬 스트림으로 변환
							 .reduce(0L, Long::Sum);
}

반대로 sequential로 병렬 스트림을 순차 스트림으로 바꿀 수 있다.

7.1.2 스트림 성능 측정

성능 최적화를 할 때는 측정이 가장 중요한데, 이를 도와주는 라이브러리들이 있다.

이는 책을 참고하도록 하자.