Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

백엔드 개발 블로그

Java Stream 병렬로 실행하기 본문

Java

Java Stream 병렬로 실행하기

베꺼 2025. 5. 19. 21:50

기본

List<MyResult> results = inputList.parallelStream()
    .map(this::doSomeProcessing)
    .collect(Collectors.toList());
  • parallelStream()을 중간에 하나 넣어주기만 하여도 자동으로 병렬 실행된다.
  • 이 때 실제 병렬 처리에 사용되는 pool은 전역으로 공유하는 공유 ForkJoinPool이다.
  • 기본적으로 pool size는 CPU 코어 수 - 1이다.
    • 그렇다고 CPU 코어를 다 안쓰는 것은 아니다. 병렬 처리 시에 Main 쓰레드도 거든다. 따라서 전체 코어를 사용한다.
    • 참고 Medium 게시글
  • java.util.concurrent.ForkJoinPool.common.parallelism 환경 변수를 수정하여 기본 common pool의 사이즈를 변경할 수 있다.

ForkJoinPool을 이용해 pool size 커스터마이징

ForkJoinPool forkJoinPool = new ForkJoinPool(poolSize);
List<MyResult> results = forkJoinPool.submit(() -> inputList.parallelStream()
    .map(this::doSomeProcessing)
    .collect(Collectors.toList())).get();
  • 따로 만든 ForkJoinPool에 병렬 스트림 관련 runnable / function을 submit하여 실행하면 원하는 pool size가 적용된다.
  • Task를 따로 나누어서 submit한 것도 아니고 통짜 function을 넣었는데도 어떻게 작동하는 건지 궁금했는데
  • ForkJoinPool의 작동 방식 때문이라고 한다. (ForkJoinPool task 내에서 ForkJoinPool이 사용될 때에는 원래 pool을 그대로 사용한다.)

'Java' 카테고리의 다른 글

[Java] Java 가상 스레드 (Virtual Thread)  (1) 2023.11.11
Comments