[Java8]병렬처리(Parallel Operation)

Wintering·2022년 5월 17일
0

이펙티브 자바

목록 보기
5/18

병렬처리는 멀티 코어 CPU 환경에서 하나의 작업을 분할해서 각각의 코어가 병렬적으로 처리하는 것을 말한다.
작업 처리 시간을 줄이기 위한 것으로 자바 8에서부터는 요소를 병렬 처리할 수 있도록 병렬 스트림을 제공한다.

동시성(Concurrency)과 병렬성(Parallelism)

  • 동시성 : 멀티 작업을 위해 멀티 스레드가 번갈아가며 실행하는 성질
  • 병렬성 : 멀티 작업을 위해 멀티 코어를 동시해 실행하는 성질
    ex)싱글코어를 사용한 멀티작업의 경우, 병렬적으로 실행되는 것 같지만
    그냥 번갈아가면서 실행되는 '동시성'작업이다.

데이터 병렬성

  • 전체 데이터를 쪼개서 서브 데이터로 만들고, 서브 데이터를 병렬처리해서 작업을 빠르게 끝내는 것
    (자바 8의 병렬스트림의 방식)

  • 멀티 코어의 수만큼 대용량 요소를 서브 요소로 나누고, 각각의 서브 요소들을 분리된 스레드에서 병렬처리

작업 병렬성

  • 서로 다른 작업을 병렬 처리하는 것. (ex. 웹서버)

포크조인(ForkJoin) 프레임워크

  • 병렬스트림은 요소들을 병렬 처리하기 위해 ForkJoin 프레임워크를 사용한다.
  1. 병렬 스트림을 이용하면 런타임 시 포크조인 프레임워크가 동작, 전체 데이터를 서브 데이터로 분리한다.(포크단계)
  2. 서브 데이터를 멀티 코어에서 병렬로 처리
  3. 서브 결과를 종합해서 최종결과를 만든다. (조인단계)

ex. 쿼드코어의 경우 /
스트림의 요소를 N개라 할 때, 포크 단계에서 전체 요소를 4등분하고, 1등분씩 개별코어에서 처리한뒤
조인단계에서 3번의 결합과정을 거쳐 최종 결과를 산출

0개의 댓글