티스토리 뷰
반응형
Parallel Operation
병렬처리?
멀티 코어 환경에서 하나의 작업을 분할해서 각각의 코어가 병렬적으로 처리하는 것을 말하는데, 병령 처리의 목적은 작업 시간을 줄이기 위함.
동시성 VS 병렬성
병렬처리 작업의 방법에는 2가지가 존재하며 멀티스레드 동작 방식 이라는 점에서는 동일하지만 서로 다른 목적을 가지고 있다.
구분 | 동시성 | 병렬성 |
동작 방식 | 멀티 스레드 방식 | |
목적 | 멀티 스레드가 작업을 번갈아가며 실행 | 멀티 코어를 이용한 동시 작업 |
병렬성의 구사지 옵션(데이터 병렬, 작업 병렬)
데이터 병렬성 : 전체 데이터를 쪼개어 서브 데이터들로 만들고 이 버스 데이터들을 변렬 처리해서 작업하는 것.
CPU의 멀티 코어 수만큼 서브 요소들로 나누고, 각각의 서브 요소들을 분리된 스레드에서 병렬 처리 시킨다.ex.
쿼드 코어(4개 코어)CPU일 경우 4개의 서브 요소들로 나누고 4개의 스레드가 각각의 서브 요소들을 병렬 처리 함.작업 병렬성 : 서로 다른 작업을 병렬처리
포크 조인 프레임 워크
병렬 스트림은 요소를 처리하기 위해 포크조인 프레임워크(FF:ForkJoin Framework) 를 사용한다.
런타임 중에 FF가 동작하는데 포크 단계에서는 전체 데이터를 서브데이터로 분리한다. 그 후 분리된 서브 데이터를 멀티 코어에서 병렬로 처리하고
마지막으로 조인 단계에서 서브 결과를 결함해서 최종결과를 만들어 낸다.
항상 병렬처리를 해야할까?
스트림 병렬 처리가 스트림 순차 처리보다 항상 실행성능이 좋은 것은 아니다.
병렬처리의 3가지 요인
- 요소수와 요소당 처리시간
Collection에 요소의 수가 적고 요소당 처리 시간이 짧으면 순차 처리가 오히려 병렬 처리보다 빠를 수 있다.
병렬처리 작업은 추가적인 비용(스레드풀 생성, 스레드 생성)이 발생한다.
- 스트림 소스의 종류
ArrayList, Array은 인덱스로 요소를 관리하기 때문에 포크 단계에서는 요소를 쉽게 분리할 수 있어 병렬 처리 시간을 줄일 수 있다.
그러나 HashSet, TreeSet 처럼 인덱스 요소가 없는 경우와 LinkedList 처럼 링크를 따라 요소를 구분해야하는 경우는
요소의 분리가 어려워 병렬처리가 늦어지게 된다.
- 코어 수
코어의 수만큼 병렬 처리(데이터 병렬 방식) 작업 수를 늘릴 수 있어 처리 속도를 늘릴 수 있다.
🧾Reference
반응형
'이론' 카테고리의 다른 글
1의 보수 2의 보수 (0) | 2022.02.26 |
---|---|
OOP (Object-Oriented Programming) (0) | 2022.02.26 |
HTTP 상태와 요청 (0) | 2022.02.26 |
Mutex VS Semaphore (0) | 2022.02.26 |
[Dynamic Programming] 로보트 (0) | 2021.02.10 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- spring-cloud
- security
- 프로그래머스
- java
- nginx
- 매트랩
- interview
- Spring
- docker
- Matlab
- OOP
- 면접
- 자격증
- ajax
- 수학
- 그래프
- kakao
- 스프링
- CS
- 스프링부트
- 릿코드
- JPA
- 자바
- springboot
- C언어
- 디자인패턴
- 백준
- Algorithm
- Solid
- 알고리즘
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함