병렬성 vs 동시성

이하연·2021년 9월 16일
0

[Network] 네트워크

목록 보기
8/9

왜 병렬성과 동시성을 구분하는지?

동시성과 병렬성의 차이를 구분할 수 있어야지 CPU 바운딩 또는 IO 바운딩 상황에서 소프트웨어를 어떻게 구현해야 성능을 끌어올 수 있는지 판단이 가능하다


Warming Up

  • concurrently : 2개 이상의 ask (= 코드, 알고리즘 등) 를 수행할 때, 각 task 는 다른 task 의 수행시점에 상관없이 수행이 가능하다는 의미이다. (sequencial 의 반의어이다.) 즉, N 개의 task 의 실행 시간이 타임라인 상에서 겹칠 수 있다.
  • simultaneously : 우리가 일반적으로 사용하는 ’동시에’ 라는 단어의 맥락과 일치한다.

동시성은 병렬성이기 위한 필요조건

  • 화살표는 각 task 가 수행되는 동안의 타임라인

  • 각 영역은 task 가 수행되는 시간을 의미

  • Case 1 은 concurrently o , simultaneously x

    Case 1 은 먼저 시작된 task 가 끝나지 않아도 또 다른 task 를 시작할 수 있다. 즉, 동시성을 만족한다. 하지만 적절하게 시간을 나눠 자원을 interiving 하고 있으므로 물리적으로 정확히 같은 시간대에 동시에 수행되는 것은 아니다. 따라서 병렬성은 만족하지 않는다.

  • Case 2 는 concurrently o , simultaneously o

    Case 2 는 먼저 시작된 task 가 끝나지 않아도 또 다른 task 를 시작할 수 있다. 즉, 동시성을 만족한다. 또한 같은 시간대에 각 task 가 동시에 수행되므로 병렬성을 만족한다.

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

    • 병렬성을 만족하면, 동시성도 만족하게 된다.
    • 하지만 동시성을 만족한다고 병렬성을 만족하는 것은 아니다.

동시성

  • Concurrent computing 은 여러 계산이 동시에 실행되는 컴퓨팅의 한 형태이다.

  • 2개 이상의 task(스레드)가 있을 때 서로 다른 task의 실행 시점에 상관없이 task 실행이 가능하다는 의미를 가진다.

  • 싱글 코어에서 멀티 스레드를 동작시키기 위한 방식으로, 멀티 태스킹을 위해 여러 개의 스레드가 번갈아가면서 실행되는 성질을 말한다.

    멀티 스레드로 동시성을 만족시킬 수 있는 것이지 동시성과 멀티 스레드는 연관이 없다. 반례로 코틀린은 싱글스레드에서 코루틴을 이용하여 동시성을 만족할 수 있다.

  • 동시에 실행되는 것처럼 보이는 것

    → 싱글 코어에서 멀티 스레드를 이용해 동시성을 구현하는 일부 케이스에 대한 내용이다. 멀티 코어에서 멀티 스레드를 이용하여 동시성을 만족할 경우에는 실제 물리적 시간으로 동시에 실행된다.

병렬성

  • Parallel computing 은 많은 계산 또는 프로세스 실행이 동시에 수행되는 계산 유형이다.

  • 2개 이상의 task(스레드)가 있을 때 각 task가 물리적인 시간으로 동시에 실행이 가능하다는 의미를 가진다.

  • 멀티 코어에서 멀티 스레드를 동작시키는 방식으로, 한 개 이상의 스레드를 포함하는 각 코어들이 동시에 실행되는 성질을 말한다.

    부분적으로만 맞는 내용이다. 병렬성의 핵심은 물리적인 시간에 동시에 수행되는 것이지 멀티 코어에 포커스가 맞춰져서는 안된다. 그 예로 네트워크 상의 여러 컴퓨터에게 분산작업을 요청하는 분산 컴퓨팅이 있다.


예제 케이스

마지막으로 개념을 완전히 이해하는데 도울 수 있도록 몇가지 예제 케이스를 정의한다.

각 task 가 수행되는 시간을 1이라고 가정한다.

  • 싱글 코어, 1개의 쓰레드에서 순차적으로 2개의 task 진행 - 동시성과 병렬성 모두 만족하지 못함. seqeuncial 한 작업. 총 수행시간은 2
  • 싱글 코어, 1개의 쓰레드에서 2개의 task 가 자원을 interleaving 하며 진행 - 동시성을 만족하지만 병렬성을 만족하지 못함. 총 수행 시간은 2 + @ (있을수도 없을 수도 있다. interleaving 코스트)
  • 싱글 코어, 2개의 쓰레드에서 2개의 task 가 자원을 interleaving 하며 진행 - 동시성을 만족하지만 병렬성은 만족하지 못함. 총 수행 시간은 2보다 작다.
  • 멀티 코어, 2개의 쓰레드에서 2개의 task 가 동시에 진행 - 동시성, 병렬성을 모두 만족함. 총 수행 시간은 2보다 작다.
  • (보너스) 코틀린 내에서 싱글 코어, 1개의 쓰레드내에서 2개의 코루틴을 통해 2개의 task 가 진행 - 동시성은 만족하지만 병렬성은 만족하지 못함. 총 수행 시간은 2보다 작으며, 2개의 쓰레드를 사용했을 때보다 코스트가 낮다.

0개의 댓글