728x90
스트림을 활용한 병렬 데이터 처리
8.1 동시성 vs 병렬성
- 동시성(concurrency)은 여러 작업이 중복되는 시간 동안 한정된 리소스에 대한 경쟁을 하면서 실행되는 것을 의미합니다.
- 병렬성(parallelism)은 중첩된 작업들을 관리하는 것이 아니라 이 작업들이 동시에 실행되는 것에 중점을 준다.
즉 동시성은 동시에 실행 되는 것처럼 보이는 것일 뿐이며, 병렬성은 실제로 동시에 작업하는 것을 뜻한다.
8.2 병렬 함수 파이프라인으로써의 스트림
- 병렬 스트림은 재귀적 분해(Recursive Decomposition) 개념을 사용합니다. 이는 요소를 Spliterator를 사용하여 분할하고 요소의 덩어리를 병렬로 처리함으로써 데이터 소스를 분할하고 정복하는 것을 의미합니다.
8.4 병렬 스트림 활용 시기와 주의할 점
- 병렬과 순차 데이터 처리 방식 중 어떤 것을 선택할지에 대한 절대적인 기준은 없습니다.
적절한 데이터 소스 선택하기
- 병렬 스트림에서는 데이터 소스가 여러 부분으로 나눠진다.
- 테이터 소스의 특성상 작업이 균등하게 분배되지 않을 수 있다.
- 병렬 처리에 유리하고, 비용이 적게들 수도 있지만 경우에 따라 복잡하고 많은 비용이 사용될 수 있는 과정을 데이터 소스 분해라고 한다.
요소의 개수
- N은 요소의 수를, Q는 단일 작업에 소요되는 비용을 의미한다. N과 Q의 곲인 N * Q는 병렬 처리로 속도를 얼마나 향상시킬 수 있을지 가능성을 나타내는 지표가 된다.
- 요소의 수가 많을수록 병렬 처리의 효과가 두드러진다.
스트림 연산
순수한 람다
- 스트림 연산에서 사용되는 람다 표현식은 항상 순수해야 한다.
- 지역 외부 상태와 관련된 주요 문제를 줄이기 위해 캡처된 변수들은 반드시
effectively final
이어야 한다. effectively final
이란 한 번 할당된 이후에 다시 할당되지 않는 변수를 의미한다.실제로 문제가 되는 것은 스레드 지역 외부의 상태가 변경될 때 발생하므로..
병렬 처리에 적합한 연산
- 직관적인 방법은 스트림의 요소에 대한 접촉 순서에 의존하는 정도를 알아보는 것.
Reduce vs Collect
- 두 연산 모두 요소들을 축소하는 연산
- 함수형 프로그래밍의 관점에서 보면 폴드 연산ㅇ느 여러 요소들에 함수를 적용하여 그 결과를 재귀적으로 합쳐서 반환값을 생성
- 두 연산의 주요 차이점은 이러한 결과를 합치는 방식에서 발생
반응형
'스터디 > 함수형 프로그래밍 with 자바' 카테고리의 다른 글
Chapter 07. 스트림 사용하기 (0) | 2024.06.16 |
---|---|
Chapter 06. 스트림 (Stream) (1) | 2024.06.06 |
Chapter 05. 레코드 (Record) (0) | 2024.05.30 |
Chapter 04. 불변성 (0) | 2024.05.21 |
Chapter 03. JDK의 함수형 인터페이스 (1) | 2024.05.16 |