반응형
동시성(Concurrency)
- 논리적인 용어
- 동시에 실행되는 것처럼 보이는 것
- 싱글 코어에서 멀티 스레드를 동작시키기 위한 방식
- 하지만 멀티 코어에서도 동시성은 사용 가능함
- 코어 수에 따른 방식보다는 작업 방식에 대한 부분인데 굳이 이해하기 좋고 좁게 보자면 이렇게 이해할 수 있을꺼 같음
- 멀티 태스킹을 위해 여러 개의 스레드가 번갈아가면서 실행되는 성질
- 동시성을 이용한 싱글 코어의 멀티 태스킹은 각 스레드들이 병렬적으로 실행되는 것처럼 보이지만 사실은 번갈아가면서 조금씩 실행되고 있는 것
병렬성(Parallelism)
물리적인 용어
실제로 작업이 동시에 처리되는 것
- 멀티 코어에서 멀티 스레드를 동작시키는 방식
- 한 개 이상의 스레드를 포함하는 각 코어들이 동시에 실행되는 성질
- 병렬성은 데이터 병렬성(Data parallelism)과 작업 병렬성(Task parallelism)으로 구분
데이터 병렬성
- 같은 작업을 병렬 처리하는 것
- 전체 데이터를 나누어 서브 데이터들로 만든 뒤, 서브 데이터들을 병렬 처리하여 작업을 빠르게 수행하는 것
- 자바 8에서 지원하는 병렬 스트림이 데이터 병렬성을 구현한 것
- 서브 데이터는 멀티 코어의 수만큼 쪼개어 각각의 데이터들을 분리된 스레드에서 병렬 처리함
작업 병렬성
- 서로 다른 작업을 병렬 처리하는 것
- Example) 웹 서버 (각각의 브라우저에서 요청한 내용을 개별 스레드에서 병렬로 처리함)
동시성(Concurrency) vs 병렬성(Parallelism)
사실 동시성과 병렬성을 단순한 설명으로만 들으면 잘 이해가 되지 않는다. 비슷한 말 같은데 무슨 차이가 있는지 말이다.
위의 정리해놓은 글을 보면 간단해보이는데 잘 이해가 되지 않는다면 아래 표를 통해 다시 정리하고 이해해보면 좋을꺼같다.
|
동시성(Concurrency) |
병렬성(Parallelism) |
용어 차이 |
논리적 |
물리적 |
뜻 |
동시에 실행되는 것처럼 보이는 것 |
실제로 작업이 동시에 처리되는 것 |
코어 환경 |
싱글 코어, 멀티 코어에서 가능 |
멀티 코어에서만 가능 |
Reference
[1] 동시성과 병렬성 (http://sunphiz.me/wp/archives/1716)
[2] 동시성과 병렬성 (http://yolojeb.tistory.com/10)
반응형
'Devlopment > Reactive, Concurrency' 카테고리의 다른 글
리액티브란 무엇인가? (What's in a Name : Reactive) (0) | 2017.01.10 |
---|---|
리액티브 프로그래밍 대 리액티브 시스템 (Reactive Programming vs Reactive Systems) (0) | 2017.01.09 |
리액티브 스트림(Reactive Streams) (0) | 2017.01.04 |
데이터 스트림 (0) | 2016.12.29 |
동시성 관련 분류 (0) | 2016.12.27 |
vert.x VS Akka (0) | 2016.11.22 |
리액티브 프로그래밍이란 무엇입니까? What is reactive programming? (0) | 2016.11.21 |
1. 소프트웨어 패러다임 - 성능 그리고 동시성 (0) | 2016.11.17 |
synchronous, asynchronous, blocking, non-blocking (0) | 2016.10.31 |
Rx-Java와 Java8에서의 반응형 프로그래밍 (Reactive Programming in Java 8 with Rx-Java) (0) | 2016.10.31 |