더북(TheBook)

자바스크립트는 싱글 스레드로 움직인다

자바스크립트는 싱글 스레드(single thread)로 움직인다. 블로킹(blocking)모델을 채용했다는 의미가 아니다. 전혀 거리가 멀다. 자바스크립트는 다른 식으로 비동기 프로그래밍을 해야 한다는 뜻이다.

멀티 스레드(multi thread)언어에서는 어떤 작업을 해당 코드와 병렬 실행시킬 수 있지만, 자바스크립트는 어떤 이벤트가 끝나자마자 실행할 함수를 큐에 넣는 게 고작이다. 여기서 이벤트란 일정 시간 경과(setTimeout), 다른 웹 사이트에서 데이터 조회(XMLHttpRequest.send), 마우스 클릭 등이다. 자바스크립트 엔진은 이벤트 루프(event loop)에서 한 번에 하나씩 함수를 꺼내 실행한다.

설계 관점에서 보면 이런 방식이 오히려 진정한 멀티 스레드 환경보다 생각하기 편하다. 제어권을 가진 상태에서 인터럽트를 당하거나 다른 객체가 변수에 마음대로 접근하는 식의 문제는 신경 쓰지 않아도 되니까.

또한, 프로세서를 독차지할 염려도 없다.

변수가 마구 엉긴 채 어지럽게 흩뿌려진 이벤트 처리기 대신에 자바스크립트 프라미스를 써서 블로킹 없는 코드를 작성하는 방법은 6장에서 다룬다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.