ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1. 동시성과 병렬성
    책/7가지 동시성 모델 2023. 10. 22. 13:55

     

     

    출처 - https://kwahome.medium.com/concurrency-is-not-parallelism-a5451d1cde8d

    1. 동시성과 동시성 프로그래밍

    저는 새로운 용어를 만나면 우선 영어 사전에서 뜻을 찾아보는 것을 좋아합니다.

     

    Concurrency

    the fact of two or more events or circumstances happening or existing at the same time.
    "the unfortunate concurrency of both high debt and high unemployment"

     

    "한 순간에  두개 이상의 이벤트가 존재하는 것" 이라고 이야기하고 있네요.

     

    현실 세계에서는 한 순간에 두개 이상의 이벤트가 존재하는 것이 아주 당연한 일이겠지만,

    컴퓨터(CPU)의 입장에서 생각해보면 어떨까요? 

     

    우선 컴퓨터가 1코어 CPU를 가지고 있다고 가정한다면, 컴퓨터 입장에서는 불가능한 일이 됩니다.

    기본적으로 컴퓨터는 한 순간에 1개의 이벤트만 처리할 수 있기 때문입니다.

    여기서 이벤트는 '처리해야할 일' 정도로 생각하면 좋을 것 같습니다.

     

     

    https://blog.bitsrc.io/sequential-vs-concurrent-vs-parallelism-87d1907e5be0

     

    하지만 우리는 컴퓨터를 사용할 때 음악을 들으면서 웹서핑을 하는 것처럼 여러 가지 일을 동시에 할 수 있습니다.

    이는 사용자 입장에서 보면 컴퓨터는 동시성을 가지고 있는 것이라고도 볼 수도 있겠네요.

     

     

    "분명 컴퓨터는 한 번에 한 개의 일만 처리할 수 있다고 했는데, 어떻게 음악을 들으면서 웹서핑이 동시에 가능하지?"

     

     

    그렇다면 컴퓨터는 어떻게 동시성 개념을 구현하고 있을까요?

    컴퓨터는 해야하는 일들을 아주 작은 단위로 나눈 뒤, 빠르게 번갈아 가면서 실행하는 방법으로 동시적인것 처럼 보이게하는 방법을 사용하고 있습니다.

     

    이러한 방법은 유저의 응답시간을 줄이고, cpu 사용률을 최대화 하는 등 많은 장점을 가지고 있지만, 이를 구현하기 위해 주의해야할 부분들이 늘어나는 단점을 가지게 됩니다. (주의해야할 부분들은 다음 글에서 깊게 살펴보겠습니다.)

     


    2.  병렬성과 병렬성 프로그래밍

    저는 개인적으로 동시성보다는 병렬성이 개념적으로 더 쉽게 다가왔던 것 같습니다.

    아무래도 '병렬'이라는 개념이 조금 더 익숙한 개념이라 그런게 아닐까 합니다.

     

    Paralel

    (of lines, planes, surfaces, or objects) side by side and having the same distance continuously between them.

     

    "parallel lines never meet"
     
     
    "평행한 두 개의 선은 만나지 않는다." 라고 Paralel을 설명하고 있네요.
    저는 위 문장을 보니, 서로 간섭하지 않는 두 개의 선이 머릿 속에 떠오르는 것 같습니다.
     
     
    https://blog.bitsrc.io/sequential-vs-concurrent-vs-parallelism-87d1907e5be0
     

    동시성은 여러가지 일을 동시에 실행되는 것 처럼 보이는 것에 초점을 맞추고 있다면, 병렬성은 한가지 일을 어떻게 빠르게 처리할 것 인가에 초점을 두고 있다고 볼 수 있습니다. 

     

    예를 들어, 피자 박스 1000개를 접어야하는 일을 있다고 생각해보겠습니다.

    1명의 사람이 1000개의 박스를 접는데 10시간이 걸리는데, 이 일을 더 빨리 끝내려면 어떻게 하면 될까요?

    2명의 사람이 한다면, 각 500개의 박스를 접으면 되고 5시간이면 일이 끝날 것입니다.

    5명의 사람이 한다면, 2시간이 걸릴 것이고 10명의 사람이 한다면 1시간이면 모든 일이 끝날 것입니다.

     

    다시 컴퓨터 세계로 돌아가보겠습니다.

    우리는 위에서 동시성을 이야기할 때, 컴퓨터는 1개의 코어만 가지고 있다고 가정을 하였습니다.

    마치 1명의 사람이 모든 박스를 접는 것과 같은 상황입니다. 병렬성이라는 것이 발생할 수 없는 조건입니다.

     

    하지만 오늘날의 컴퓨터는 멀티코어를 가지고 있지요. 따라서 컴퓨터가 박스 1000개를 접는다면

    2코어를 가진 컴퓨터는 각 코어별로 500개씩 접는 작업을 하여 2배 빠르게 일을 끝낼 것이고,

    10코어를 가진 컴퓨터는 각 코어별로 100개씩 접어서 작업을 10배 빠르게 끝낼 수 있을 것입니다.

    (실제 멀티코어의 작동 효율은 2배, 10배 처럼 단순하게 계산이 되지는 않습니다)

     

    지금까지 코어를 기준으로 아주 높은 추상화 수준에서 간단하게 병렬성에 대해 이야기 해보았습니다.

    실제로 병렬성은 컴퓨터의 동작 중에 비트 수준에서부터 태스크 수준까지 다양한 수준에서 작동하고 있습니다.

     

     

     

     


    [이미지 출처]

    https://www.yes24.com/Product/Goods/29331038 (글 대표 이미지)

Designed by Tistory.