동시성 과 병렬성 그리고 자바스크립트

동시성(Concurrent) 이란, 한 번에 하나 밖에 처리하지 못하는 싱글 코어에서 한 번에 여러 일을 처리하는 것처럼 보이는 논리적인 개념입니다. 이게 가능한 이유는 동시에 실행하는 것처럼 보이기 위해 내부적으로 문맥 교환(Context Switch)이 일어납니다. 병렬성 (Parallel) 이란, 실제로 여러 일을 동시에 처리할 수 있는 멀티 코어에서 멀티 스레드를 동작 시키는 방식입니다. 즉, 동시성과는 달리 논리가 아닌 물리적인 의미에서의 동시 실행을 의미합니다. 병렬성이 멀티 코어 작업이라 항상 더 좋을 것 같지만 네트워크 통신과 같은 I/O 작업은 CPU 가 거의 일하지 않고, 응답이 올 때까지 대기 상태에 있게 되어 효율적이지 못합니다. 또한 작업이 바뀔 때 문맥 교환(Context Switch) 이 발생하고 동시 작업이 너무 많다면 문맥 교환의 오버헤드로 동시성 보다 더 느릴 수 있습니다. 위와 같은 이유로 자바스크립트는 병렬성이 아닌, 동시성을 지원하며, 이 동시성을 지원하기 위해 웹 브라우저(런타임 환경)는 Context Switch( 이벤트 루프)를 지원합니다. (NodeJS 도 동시성 모델이며, 내부 동작 방식에 약간의 차이가 있습니다) 그리고 이 이벤트 루프로 인한 동시성으로 인해 자바스크립트에서 비동기 처리가 가능합니다. 따라서 자바스크립트는 병렬성이 아닌 동시성(싱글 스레드) 언어 이며, 이벤트 루프를 기반으로 한 비동기(논 블로킹) 언어입니다.

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2022년 11월 9일 오전 4:11

 • 

저장 22조회 3,442

댓글 0