호우동의 개발일지

Today :

article thumbnail

동시성과 병렬성을 비교하기 위해서는
일단 두 가지 개념에 대한 정확한 이해가 필요하다.

썸네일용

 

동시성 병렬성
시각적으로 동시에 실행되는 것으로 보임(실제로는 X) 실제로 동시에 여러 작업이 실행
논리적인 개념 물리적인 개념
싱글 코어에서 멀티 쓰레드 동작시키는 방식 멀티코어에서 멀티 쓰레드를 동작시키는 방식
여러 일을 한번에 많이 처리 여러 일을 한번에 많이 처리

 

동시성과 병렬성을 비교하면 위와 같다.
이제 아래에서 하나씩 차근차근 의미를 풀어보도록 하겠다.

 


동시성과 병렬성의  개념


동시성과 병렬성은 개념적으로 뭐가 다를까?
위의 표와 이름만 보면 크게 다를 게 없어 보일 것이다.

그림을 통해 알아보자.

 

동시성(Concurrent)

동시성
동시성(Concurrent)

그림처럼 지나가야 하는 문이 있고,
그 앞에 사람들이 두 줄로 서있다고 가정해 보자.


그렇다면 먼저 각 줄에서 온 순서대로 번갈아가면서 한 명씩 입장하게 될 것이다.
이 과정이 엄청 빠르게 진행된다고 생각해 보자.

문 밖에 있는 사람이 볼 때는 다른 줄에 있는 두 명이
동시에 들어오는 것처럼 보일 것이다.

이것이 동시성의 좋은 예이다.

즉, 동시성이란 겉으로 보기에는 동시에 실행되고 있는 것처럼 보이지만,
실제로는 순차적으로 실행되고 있는 것이다.

순차적으로 실행되고 있지만
그 속도가 너무 빨라 그렇게 보이지 않는 것일 뿐이다.

 


병렬성(Parallelism)

병렬성
병렬성(Parallelism)

병렬성은 이런 식으로 문이 두 개가 있는 것과 같다.

각 문에는 한 줄씩 서있기 때문에 문 밖에 있는 사람이 볼 때,
동시성과 똑같이 두 명씩 나가는 것처럼 보일 것이다.

차이점은 병렬성은 실제로 두 명씩 나간다는 것이다.

즉, 병렬성이란 실제 구조적으로 동시에 실행되는 것이다.

 


동시성과 병렬성의 차이


위의 그림을 컴퓨터 구조적으로 대입해 보자.


전체적인 작업 = 각 환경에서 벌어지는 멀티 스레드 과정
서로 다른 줄 = 서로 다른 Task(코드, 알고리즘)를 실행하는 환경, 즉 각기 다른 Thread
문의 개수 = 코어의 개수

동시성 처리과정 vs 병렬성 처리 과정
동시성 처리과정 vs 병렬성 처리과정


동시성에 관한 그림은 문이 하나기 때문에
싱글 코어에서 일어나는 멀티스레드 작업이고,

병렬성에 관한 그림은 문이 두 개이기 때문에
멀티 코어에서 일어나는 멀티스레드 작업이라고 볼 수 있다.
(그림에서는 코어당 스레드가 하나기 때문에 싱글스레드)

이때, 싱글 코어에서는 다른 작업으로 바꾸어 실행할 때 내부적으로 Context Switch가 발생한다.
싱글 코어니, 멀티 스레드니 Context Switch에 관한 내용은 밑에 써둔 글을 참고하길 바란다.

 

프로세스와 쓰레드의 차이 (Process vs Thread)

프로세스와 쓰레드의 개념 우선 차이점을 알기 위해서 프로세스와 쓰레드의 개념부터 간단히 살펴보자. 프로세스(Process) : 운영체제로부터 자원을 할당받는 작업의 단위 프로세스는 운영체제에

howudong.tistory.com

이 정도 설명이면 위의 표에서 동시성과 병렬성을 비교해 둔 표가 어느 정도 이해가 될 것이다.

동시성이 논리적 개념이란 의미는
멀티 태스킹을 위해 여러 작업이 거의 동시에 실행되고 있다는 것을 명시한다.

이와 반대로 병렬성은 물리적 개념이라는 의미는
하드웨어적으로, 그리고 실제로 동시에 실행되고 있기 때문이다.


동시성과 병렬성의 관계


동시성은 병렬성이기 위한 필요조건이지만 충분조건은 아니다.

이 말을 쉽게 설명하자면

  • 병렬성을 만족하면, 동시성도 만족한다.
    -> 병렬성은 동시에 실행되기 때문

  • 동시성을 만족한다고 해서 병렬성을 만족하는 아니다.
    -> 두 개가 동시에 처리되는 것처럼 보인다 해도 실제로 동시에 처리되는지는 알 수 없기 때문

예제를 통해 알아보자.
작업 하나를 실행하는 데 걸리는 시간이 1이라고 가정한다.

  • 싱글코어, 1개의 스레드에서 2개의 작업을 순차(sequential 실행)
    -> 총 수행시간 2(동시성 X 병렬성 X)

  • 싱글코어, 2개의 스레드에서 2개의 작업을 각각 맡아서 실행(멀티스레드)
    -> 총 수행시간은 2보다 작다.(동시성 O 병렬성 X)

  • 멀티코어, 2개의 스레드에서 2개의 작업이 동시에 실행
    -> 총 수행시간은 2보다 작다.(동시성 O 병렬성 O)

참고 자료 및 블로그

 

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

서점에 가면 다양한 언어별로 동시성을 다루는 책들을 많이 볼 수 있습니다. 프로그래밍을 하다 보면 이러한 동시성 처리가 필요한 경우가 있습니다. 그런데 동시성이라는 말을 종종 병렬성과

seamless.tistory.com

https://vagabond95.me/posts/concurrency_vs_parallelism/

 

동시성(Concurrency) 과 병렬성 (Parallelism) 올바른 개념 잡기 - 기록은 기억을 지배한다

처음에 접하면 항상 헷갈리기 쉬운 동시성(Concurrency) 과 병렬성(Parallelism) 에 대해 정리해보고자 한다. 시간으로 풀어보기 동시성과 병렬성은 각 작업이 진행되는 시간의 관점에서 살펴봐야 올바

vagabond95.me