동시성 & 병렬성

기술노트

🏃‍♂️ 동시성 (Concurrency) & 병렬성 (Parallelism)

동시성병렬성은 여러 작업을 한 번에 처리한다는 점에서 혼동하기 쉽지만, 근본적인 원리가 다른 중요한 개념입니다.


⏳ 동시성 (Concurrency)

동시성은 하나의 코어(CPU)가 여러 작업을 아주 짧은 시간 동안 번갈아 가며 실행하여, 마치 동시에 여러 작업이 처리되는 것처럼 보이게 하는 것입니다. 실제로는 한 순간에 하나의 작업만 처리되지만, '논리적으로' 동시에 실행되는 것처럼 보입니다.

  • 핵심 : 문맥 교환 (Context Switching)
  • 비유 : 한 명의 바리스타가 여러 손님의 주문을 번갈아 가며 처리하는 것.
  • 목표 : CPU의 유휴 시간을 줄여 전체적인 처리량을 높이는 것.

⛓️ 병렬성 (Parallelism)

병렬성은 여러 개의 코어(CPU)가 여러 작업을 물리적으로 정말 동시에 처리하는 것입니다. 각 코어가 서로 다른 작업을 맡아 동시에 실행합니다.

  • 핵심 : 다중 코어 (Multi-core)
  • 비유 : 여러 명의 바리스타가 각자 다른 손님의 주문을 동시에 처리하는 것.
  • 목표 : 하나의 작업을 더 빠르게 끝내거나, 더 많은 작업을 동시에 처리하는 것.

🆚 주요 차이점 요약

구분 동시성 (Concurrency) 병렬성 (Parallelism)
코어 수 싱글 코어 또는 멀티 코어 멀티 코어 필수
실행 방식 논리적 동시 실행 (번갈아 가며) 물리적 동시 실행
목적 응답성 향상, 처리량 증대 실행 속도 향상, 더 많은 작업 처리
관계 동시성은 병렬성을 포함하지 않을 수 있음 병렬성은 항상 동시성을 가짐

💡 개발자 핵심 Point

  • 동시성은 한정된 자원으로 여러 작업을 효율적으로 관리하는 문제에 가깝습니다. (예: 웹 서버가 수많은 클라이언트 요청 처리)
  • 병렬성은 가용한 자원을 모두 동원하여 작업을 빠르게 끝내는 문제에 가깝습니다. (예: 대용량 데이터 분석, 그래픽 렌더링)
  • 동시성을 제대로 처리하지 못하면 교착 상태(Deadlock)경쟁 상태(Race Condition)와 같은 복잡한 문제가 발생할 수 있습니다.
  • 현대의 멀티코어 환경에서는 동시성과 병렬성을 모두 고려하여 효율적인 프로그램을 설계하는 능력이 중요합니다.