java - Stream API, 병렬 스트림

잠자는 고양이·2025년 5월 22일

Java

목록 보기
67/73

Stream API

Java8에서 도입된 Stream API는 데이터 컬렉션 (List, Set,Map)을 함수형 방식으로 처리하는 도구

  • 기본적으로 stream()을 사용하면 데이터 흐름을 선언적으로 조작할 수 있음
  • for-loop 없이 간결한 코드로 데이터 변환, 필터링, 매핑 가능
  • 불변성 유자 : 원본 데이터를 변경하지 않고 새로운 스트림을 생성하여 처리
  • parallelStream()을 활용하면 멀티코어 CPU에서 병렬 처리 가능

Stream api의 주요 특징

  • 선언형 프로그래밍 지원
    • for-loop없이 stream()으로 데이터 처리 가능
  • 중간 연산 지원
    • filter(), map(),sorted()등 여러 단계로 데이터 변환 가능
  • 최종 연산 지원
    • collect(), count(), forEach()등으로 데이터 최종 처리 가능
  • 병렬 처리 가능
    • 내부적으로 ForkJoinPool을 사용하여 멀티 코어 활용
  • Lazy Evaluation (지연 연산) 가능
    • stream()은 연산을 정의할 뿐 실행은 최종 연산 시 수행됨

병렬 스트림이란 ?

  • java8 에서 도입된 Stream API를 활용한 병렬 처리 기법
  • parallelStream()을 사용하면 내부적으로 멀티코어 cpu를 활용하여 데이터를 병렬로 처리
  • 내부적으로 ForkJoinPool을 사용하여 작업을 나누어 병렬로 실행

병렬 스트림의 기본 구조

  • 순차 스트림은 main 스레드에서 실행되지만, 병렬 스트림은 여러 개의 ForkJoinPool스레드에서 실행됨

ForkJoinPool 이란?

Fork-Join 알고리즘을 활용한 java의 병렬 처리 프레임워크

  • 대량 데이터를 작은 작업 단위로 나누고 (Fork)병렬 실행 후 병합(join)하는 방식
  • 재귀적 (Task splitting)으로 작업을 분할하여 병렬 연산 가능
  • 기본적으로 병렬 스트림에서도 ForkJoinPool 이 사용됨

Fork-Join 알고리즘

  • 재궈적으로 작업을 작은 단위로 나누고 (Fork)나뉜 작업을 병렬로 실행한 후 결과를 병합 (Join)

기본 원리
1. 작업을 일정 크기로 분할(Fork)
2. 각 작업을 병렬로 실행
3. 작업이 완료되면 결과를 병합(join)
4. 최종 결과를 반환

병렬 스트림과 ForkJoinPool의 차이점

  • 병렬 스트림(parallelStream()
    • List.parallelStream() 사용
    • 자동 분할
    • 컬렉션 대상(List, Set,Map)
    • 메소드 체이닝(Map, filter등)가능
    • 데이터 변환, 필터링,집계 연산에 적합
  • ForkJoinPool
    • ForkJoinTask또는 RecursiveTask
    • 개발자가 직접 작업을 분할(fork(),join())
    • 대량 데이터 처리, 재귀적 연산에 적합
profile
개발자가 되고 싶은 잠자는고양이

0개의 댓글