본문 바로가기
Computer Science/운영체제(Operating System)

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

by 컴돈AI 2023. 12. 8.

목차

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

    • 먼저 짚고 넘어가야 할 것은 동시성과 병렬성은 대립되는 개념이 아닙니다. 동시성과 병렬성은 같이 공존할 수 있습니다. 하지만 용어가 비슷해 두 개념을 같이 비교하면서 설명하는 경우가 많습니다.
    • 또 한가지 중요한 점은 동시성은 논리적인 개념이고, 병렬성은 물리적인 개념이라는 것입니다.
      • 동시성은 여러 작업이 교대로 수행되어 "동시에 진행되는 것처럼" 보이도록 만드는 프로그래밍 개념입니다. 싱글코어나 멀티코어에서 각각의 코어에 대해 동시성 개념이 적용가능합니다. 따라서 논리적인 개념입니다. 
      • 병렬성은 여러 작업이 물리적으로 "동시에 실행되는 것"을 의미합니다. 실제 물리적으로 동시에 진행되어야 하기 때문에 멀티코어에서만 적용되는 개념입니다. 따라서 물리적 개념이라고 할 수 있습니다.

    동시성(Concurrency)

    • 동시성은 여러 작업이 교대로 수행되어 "동시에 진행되는 것처럼" 진행되는 것입니다. 따라서 특정 시간에 여러 작업중 단 1개의 작업만 실제로 진행되고 있습니다.
    • 동시성 프로그래밍 없는 경우의 문제점
      • 작업 순차 실행: 동시성 프로그래밍이 없는 경우, 각 작업은 순차적으로 실행됩니다. 예를 들어, 작업 A, B, C, D가 각각 총 10초, 5초, 3초, 7초의 시간이 소요된다고 가정할 때, A 작업이 완료되기 전까지는 B 작업이 시작되지 않습니다. 이러한 방식으로, B는 A가 완료된 후 10초, C는 B가 완료된 후 총 15초, D는 C가 완료된 후 총 18초 후에 실행을 시작합니다. 결과적으로 뒤에 위치한 작업들은 긴 대기 시간을 갖게 되며, 이는 시스템의 전반적인 효율성을 저하시킵니다.
    • 동시성 프로그래밍의 장점
      • 작업의 동시적 실행: 동시성 프로그래밍을 사용하면, 시스템은 여러 작업을 번갈아 가며 빠르게 전환하여 실행함으로써, 모든 작업이 동시에 진행되는 것처럼 보이게 할 수 있습니다.
        • 위의 예에서, 동시성 프로그래밍을 사용하면 A, B, C, D 작업을 각각 1초 단위로 번갈아 가며 실행할 수 있습니다. 이렇게 함으로써, 각 작업은 대기 시간 없이 빠르게 진행되며, 전체 시스템의 반응성이 향상됩니다.
      • 대기 시간 최소화: 동시성 프로그래밍은 특히 IO Bound 작업에서 유용합니다. 예를 들어, 네트워크 요청이나 파일 읽기/쓰기와 같은 작업이 대기 상태에 있을 때, 다른 작업을 수행함으로써 CPU 시간을 효율적으로 사용할 수 있습니다.
    • 이처럼 동시성 프로그래밍은 작업의 대기 시간을 최소화하고, 여러 작업을 효율적으로 관리하여 시스템의 반응성과 처리 능력을 향상시킵니다. 특히 여러 작업이 동시에 요구되는 환경에서 이러한 접근 방식은 중요한 이점을 제공합니다.

    병렬성(Parallelism)

    • 병렬성은 여러 작업이 물리적으로 "동시에 실행되는 것"입니다. 따라서 멀티 코어 이상여야지만 가능한 개념입니다. 
    • 아래 예시는 cpu 코어가 4개이상일때의 병렬성의 예시입니다. 어떤 시간이든 모든 작업이 진행되고 있습니다.

    동시성과 병렬성이 공존하는 경우

    • 진행해야 하는 작업이 100개이고, cpu 코어가 4개라고 가정해 보겠습니다. 이럴 경우 cpu 코어 4개가 병렬적으로 동시에 업무를 수행합니다. 그리고 각각의 코어 안에서 동시성으로 각각의 작업들을 스위칭하면서 동시에 처리를 할 수 있게 됩니다. (동시성과 병렬성이 공존하게 됩니다.)
      • 어떤 시간에서든 실제로 진행되고 있는 프로세스는 4개입니다. (cpu 코어수가 4개이기때문입니다)
        • 즉, 4개의 작업이 병렬적으로 진행되고 있습니다.
      • 각각의 코어는 각각의 작업들을 스위칭하면서 여러 개의 작업이 동시에 진행되는 것처럼 처리하게 됩니다. 
        • 즉 각각의 코어는 동시성으로 각각의 작업들을 스위칭하면서 진행하고 있습니다.