본문 바로가기
프로그래밍

동시성, 병렬성, 동기, 비동기

by blopz 2025. 9. 10.

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

동시성-Concurrency 은 여러개의 작업을 마치 동시에 작업하는 것처럼 작동하는것을 의미한다.

 

node.js의 i/o 를 제외한 developer가 작성한 logic들은 single-thread로 작동한다.

 

하지만 async 을 사용하면 마치 "동시에" 실행되는 것처럼 작동한다.

 

하나의 쓰레드가 여러개의 작업을 번갈아 작업해 동시에 작동하는 것처럼 보이게 하는 것이다.

 

 

병렬성-Parallelism 은 실제 multi-thread로 여러개의 작업을 다른 thread에서 병렬로 처리하는것을 의미한다.

 

 

동시성은 software적 기법이라 볼 수 있고 병렬성은 hardware적 기법이라 볼 수 있다.

동기(Synchronous) vs 비동기(Asynchronous)

 

동기-Synchronous 는 한 작업이 끝날때까지 다른 작업을 시작하지 않고 기다리는 방식이다.

 

비동기-Asynchronous 는 선행된 작업이 끝날때까지 기다리지 않고 다른 작업을 수행한다.

 

 

 

'동시'와 '동기'의 단어 혼동

마치 동기의 '동(同)'과 동시성의 '동(同)'이 같아서 비슷한 개념으로 오해하기 쉽지만, 실제로는 완전히 다른 관점에서 바라보는 개념이다.

동기/비동기작업의 완료를 기다리는 방식에 대한 것이고, 동시성/병렬성작업의 실행 방식에 대한 것!

헷갈리기 쉬운 조합들

실제로는 이런 조합들이 모두 가능합니다:

  • 비동기 + 동시성: Node.js처럼 단일 스레드에서 비동기 처리
  • 비동기 + 병렬성: 멀티스레드에서 각 스레드가 비동기 작업 수행
  • 동기 + 병렬성: 멀티스레드에서 각 스레드가 동기적으로 작업 수행
  • 동기 + 동시성: 싱글스레드에서 작업을 번갈아가며 동기 처리