[운영체제] 동시성(Concurrency) VS 병렬성(Parallelism)
병렬처리는 컴퓨터 시스템에서 성능향상과 효율성을 위한 핵심 기술 중 하나입니다. 이 병렬처리에 대해 공부하다보면 동시성과 병렬성이라는 개념을 접하게 됩니다. 이 때 병렬(parallel)과 동시(concurrent)의 단어적 의미는 매우 유사하여 컴퓨터 프로그래밍 관점의 동시성과 병렬성을 이해하는 데 매우 혼란스러 울 수 있습니다. 단어적 의미와는 다르게 프로그래밍 관점에서 동시성과 병렬성은 서로 다른 개념이며 다른 목적성을 가집니다.
동시성(Concurrency)

동시성은 프로그램이나 시스템의 의미론적 속성 입니다 . 두 개 이상의 작업이 동시에 진행되는 것, 즉 여러 작업이 실행되는 기간이 겹치는 것을 의미합니다.
여러 작업은 '동시'에 실행되는 것 처럼 보이지만 사실 하나의 CPU는 하나의 작업만 처리할 수 있기 때문에 짧은 시간을 간격으로 작업들이 번갈아 실행됩니다. 이때 Context Switching이 발생하며 동기화문제가 발생할 수 있습니다.
병렬성(Parallelism)

두 개 이상의 작업이 실제로 동시에 실행되는 것을 의미하는 개념입니다.
CPU는 한번에 하나의 작업만 실행 가능하기 때문에 싱글 코어에서는 병렬성을 가질 수 없으며, 각 작업은 독립적으로 별도의 코어에서 동시에 실행됩니다. 대규모 작업에서 성능을 향상시키는데 주로 사용됩니다. 그러나 하나의 코어에서 실행하던 작업을 여러 코어로에서 나누어 처리하기 때문에 자원의 경쟁상태(race condition) 또는 동기화 문제가 발생할 수 있습니다.
동시성 vs 병렬성
| 동시성 (Concurrency) | 병렬성 (Parallelism) | |
| 개념 | 동시에 처리하는 것처럼 보이게 하는 것 | 여러 작업을 실제로 동시에 처리하는 것 |
| 사용 코어 | 싱글 코어,멀티 코어 | 멀티 코어 |
| 동작 방식 | 싱글 코어에서 멀티 스레드를 동작 시키는 방식 | 멀티 코어에서 멀티 스레드를 동작시키는 방식 |
| 개념적 차이 | 논리적인 개념 | 물리적인 개념 |
| 성능 향상 | 입출력이나 대기 시간이 발생하는 작업을 병렬로 처리하여 성능 향상 | 다중 코어 시스템에서 여러 작업을 병렬로 처리하여 전체 작업 처리 속도 항상 |
| 자원 활용 | 작업의 대기 시간에 다른 작업을 실행하여 자원을 효율적으로 활용 | 여러 작업이 동시에 처리하며 대기시간을 최소화하여 자원을 효율적으로 활용 |