본문 바로가기
정리

순차적 스트림과 병렬 스트림

by dyddyd0 2025. 5. 12.

우선 자바의 스트림은

원본데이터를 변경하지 않는다는

불변성 특징을 갖고 있어 데이터 소스 변경 없이 파이프라인 방식으로 함수형 처리를 제공하는 API임.

 

 

따로 병렬스트림으로 지정하지 않으면 기본적으로 단일 스레드로 파이프라인을 처리하는 순차 스트림(sequential stream)으로 동작함.

List<Integer> listOfNumbers = Arrays.asList(1, 2, 3, 4);
listOfNumbers.stream().forEach(number ->
    System.out.println(number + " " + Thread.currentThread().getName())
);

 

순차 스트림의 결과는 항상 예측 가능 함.

리스트의 element는 항상 순서대로 출력됨.

1 main
2 main
3 main
4 main

 

 

 

병렬스트림(parallel stream) : 멀티쓰레드를 사용한 스트림

 

병렬 스트림은 .stream() 메서드 대신 .parallelStream() 메서드로 스트림을 생성하거나,

순차 스트림에 병렬 스트림 메서드를 사용해 만들 수 있다.

List<Integer> listOfNumbers = Arrays.asList(1, 2, 3, 4);
listOfNumbers.parallelStream().forEach(number ->
    System.out.println(number + " " + Thread.currentThread().getName())
);

 

병렬 스트림은 순차 스트림과 다르게 별개의 core에서 병렬로 코드를 실행한다.

멀티 쓰레드를 이용하니 결과를 직접 제어하기 힘들다.

다음과 같이 매 실행마다 결과는 다르게 나올 것임.

4 ForkJoinPool.commonPool-worker-3
2 ForkJoinPool.commonPool-worker-5
1 ForkJoinPool.commonPool-worker-7
3 main

 

 

 

언제 병렬스트림을 사용하면 좋을지? 출처: Medium

  1. 데이터셋 처리:
    데이터의 양이 많을 때, 병렬 스트림을 사용하면 여러 코어를 활용하여 처리 속도를 향상시킬 수 있음.
  2. CPU 집약적인 작업:
    요소에 대한 연산이 복잡하고 시간이 많이 걸리는 경우, 병렬 스트림을 통해 병렬 처리의 이점을 얻을 있음.
  3. 독립적인 연산:
    요소의 처리가 서로 독립적이고, 순서에 민감하지 않은 경우 병렬 스트림이 효과적임.

 

병렬 스트림 사용을 권장하지 않는 경우

  1. 작은 데이터셋:
    데이터의 양이 적을 때는 병렬 처리의 오버헤드가 성능 향상을 상쇄할 있음.
  2. I/O 중심의 작업:
    파일 읽기/쓰기나 네트워크 통신과 같은 I/O 작업은 병렬 스트림의 이점을 크게 누리기 어려움.
  3. 순서가 중요한 작업:
    결과의 순서가 중요하거나, 요소 간의 의존성이 있는 경우 병렬 스트림은 예측 불가능한 결과를 초래할 있음.

 

 

코드 출처는 여기입니다.

 

 

추가1

 

What is Java Parallel Streams? - GeeksforGeeks

Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.

www.geeksforgeeks.org

 

추가2

 

Java streams | Parallel and serial streams: Site24x7

Java streams is the easiest and most convenient way to operate on collections without altering the underlying data source.

www.site24x7.com

 

 

반응형

'정리' 카테고리의 다른 글

람다식과 스트림  (0) 2025.05.07
소프트웨어 개발 방법론 애자일  (0) 2025.05.06
클린 코드를 위한 소프트웨어 설계 원칙: DRY 원칙  (1) 2025.05.03
스프링의 @Transactional  (0) 2025.05.02
스프링 Bean의 scope  (0) 2025.04.30