동시성(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처럼 단일 스레드에서 비동기 처리
- 비동기 + 병렬성: 멀티스레드에서 각 스레드가 비동기 작업 수행
- 동기 + 병렬성: 멀티스레드에서 각 스레드가 동기적으로 작업 수행
- 동기 + 동시성: 싱글스레드에서 작업을 번갈아가며 동기 처리
'프로그래밍' 카테고리의 다른 글
누적합으로 부분합 구하기 (5) | 2025.08.06 |
---|---|
[Flutter] StatefulWidget에서 Navigator.pushNamed 쓰기 (1) | 2025.07.23 |