병렬 처리(Parallel Operation)란?
멀티 코어 CPU 환경에서 하나의 작업을 분할해서 각각의 코어가 병렬적으로 처리하는 것
목적 : 작업 처리 시간 단축
자바 8부터 컬렉션이나 배열의 요소를 병렬처리할 수 있도록 ParallelStream 제공
멀티 스레드의 동작 방식 : 동시성과 병렬성
동시성 : 멀티 작업을 위해 멀티 스레드가 번갈아가며 실행하는 성질
싱글코어 CPU를 이용한 멀티 작업은 병렬적으로 실행되는 것 처럼 보이지만, 사실은 번갈아가며 실행하는 동시성 작업이다.
병렬성 : 멀티 작업을 위해 멀티 코어를 이용해서 동시에 실행하는 성질
[출처] JAVA Chapter16 스트림과 병렬처리(4/4) - 병렬 처리|작성자 호이돌
http://blog.naver.com/PostView.nhn?blogId=qkrghdud0&logNo=220702916128
병렬성은 데이터 병렬성(Data Parallelism)과 작업 병렬성(Task Parallelism)으로 구분
데이터 병렬성
전체 데이터를 쪼개어 서브 데이터들로 만들고 이 서브 데이터들을 병렬처리
멀티코어의 수만큼 대용량 요소를 서브 요소들로 쪼갠 후 병렬 처리한다.
작업 병렬성
서로 다른 작업을 병렬 처리
ex) 웹서버는 각각의 브라우저에서 요청한 내용을 개별 스레드에서 병렬로 처리한다.
포크조인(ForkJoin) 프레임워크
PrallelStream을 이용하면 런타임 시에 포크조인 프레임워크가 동작
포크 단계에서 전체 데이터를 서브데이터로 분리하고 멀티코어에서 병렬로 처리
조인 단계에서는 서브 결과를 결합하여 최종결과를 만들어 냄
포크조인 프레임워크는 포크와 조인 기능 이외에 스레드풀인 FolkJoinPool을 제공
병렬스트림 생성
java.util.Collection 인터페이스의 parallelStream() / java.Stream.(XXX)Stream 인터페이스의 parallel() 메서드로 얻을 수 있다.
parallelStream() 메서드는 컬렉션으로부터 병렬스트림을 바로 리턴
parallel() 메서드는 순차 처리 스트림을 병렬 처리 스트림으로 변환하여 리턴
병렬 처리 성능
스트림 병렬 처리가 스트림 순차 처리보다 항상 실행 성능이 좋은건 아니다.
1. 요소의 수와 요소당 처리 시간
컬렉션에 요소의 수가 적고 요소당 처리시간이 짧으면 순차 처리가 더 빠를 수 있다.
2. 스트림 소스의 종류
ArrayList와 배열은 인덱스로 요소를 관리하여 포크단계에서 요소 분리가 쉬워 병렬 처리 시간이 절약되지만
HashSet TreeSet은 요소 분리가 쉽지 않고, LinkedList 역시 링크를 따라가야 하므로 요소분리가 어렵다.
따라서 이 소스들은 ArrayList나 배열보다는 상대적으로 병렬 처리가 늦다.
3. 코어의 수
싱글코어 CPU일 경우에는 순차처리가 빠르다. 스레드의 수만 증가하고 동시성 작업으로 처리된다.
(임시 저장)
'Java > study' 카테고리의 다른 글
IO기반 네트워킹 (0) | 2019.04.22 |
---|---|
IO기반 입출력 (0) | 2019.04.22 |
스트림과 병렬처리 (0) | 2019.04.20 |
컬렉션 프레임워크(Collection Framework) (0) | 2019.04.19 |
로컬 객체의 로컬 변수, 매개 변수 사용 (0) | 2019.04.19 |