단순 더하기 연산을 병렬 스트림으로 처리하기
public long parallelSum(long n) {
return Stream.iterate(1L, i->i + 1)
.limit(n)
.parallel()
.reduce(0L, Long::sum);
}
리듀싱 연산으로 스트림의 모든 숫자를 더한다.
마지막으로 리듀싱 연산으로 생성된 부분 결과를 다시 리듀싱 연산으로 합쳐서 전체 스트림의 리듀싱 결과를 도출한다.
- 243p
- 내부 반복을 이용하면 명시적으로 다른 스레드를 사용하지 않고도 스트림을 병렬로 처리할 수 있다.
- 간단하게 스트림을 병렬로 처리할 수 있지만 항상 병렬 처리가 빠른 것은 아니다. 병렬 소프트웨어 동작 방법과 성능은 직관적이지 않을 때가 많으므로 병렬 처리를 사용했을 때 성능을 직접 측정해봐야 한다.
- 병렬 스트림으로 데이터 집합을 병렬 실행할 때 특히 처리해야 할 데이터가 아주 많거나 각 요소를 처리하는 데 오랜 시간이 걸릴 때 성능을 높일 수 있다.
- 가능하면 기본형 특화 스트림을 사용하는 등 올바른 자료구조 선택이 어떤 연산을 병렬로 처리하는 것보다 성능적으로 더 큰 영향을 미칠 수 있다.
- 포크/조인 프레임워크에서는 병렬화할 수 있는 태스크를 작은 태스크로 분할한 다음에 분할된 태스크를 각각의 스레드로 실행하며 서브태스크 각각의 결과를 합쳐서 최종 결과를 생산한다.
- Spliterator는 탐색하려는 데이터를 포함하는 스트림을 어떻게 병렬화할 것인지 정의한다.
- 271 ~ 272p
반응형
'Book' 카테고리의 다른 글
[독서 기록] 모던 자바 인 액션 9장 리팩터링, 테스팅, 디버깅 (0) | 2023.01.10 |
---|---|
[독서 기록] 모던 자바 인 액션 8장 컬렉션 API 개선 (0) | 2023.01.09 |
[독서 기록] 모던 자바 인 액션 6장 스트림으로 데이터 수집 (0) | 2023.01.08 |
[독서 기록] 모던 자바 인 액션 4장 스트림 소개, 5장 스트림 활용 (0) | 2023.01.08 |
[독서 기록] 모던 자바 인 액션 3장 람다 표현식 (1) | 2023.01.06 |