📍 동기 처리와 비동기 처리

JavaScript에서 함수를 호출하면, 함수 코드가 평가되어 함수 실행 컨텍스트가 생성된다. 이때 생성된 실행 컨텍스트는 콜 스택이라고 불리는 실행 컨텍스트 스택에 푸시되고 함수가 실행된다. 콜 스택에서 차례가 되어 함수가 실행되고, 실행이 종료되면 해당 함수 실행 컨텍스트는 콜 스택에서 팝되어 제거되는 원리를 가지고 있다.

(1) JavaScript는 싱글 스레드 언어다?

인터프리터 방식으로 동작하는 JavaScript가 싱글 스레드라고 불리는 이유는 무엇일까? 정확한 이유와 원리는 **자바스크립트 엔진의 동작 방식**에 있다.

Untitled

자바스크립트 엔진은 단 하나의 콜 스택을 가진다. 즉, 함수를 처리할 수 있는 창구가 단 하나밖에 없다는 의미이자, 2개의 함수를 동시에 실행할 수 없는 환경을 가지고 있다는 것이다.

image.png

콜 스택의 최상위 요소인 실행 중인 실행 컨텍스트를 제외하면, 콜 스택에 존재하는 다른 실행 컨텍스트들은 모두 실행 대기 중인 작업 요소라는 것이다. 따라서, 현재 실행 중인 실행 컨텍스트가 제외되어야 그 다음 최상위 요소인 실행 컨텍스트가 실행이 가능하다.

(2) 동기 호출방식의 문제점?