자바스크립트의 동시성(concurrency) 처리 모델의 기본 원리
여러가지 동작을 한꺼번에 처리하려고 할 때의 기본 원리이다. 코드를 실행하고 이벤트를 실행하고 그다음 동작을 실행할 것을 정하는 것이 바로 이 원리이다.
Memory Heap | Call Stack |
---|---|
자바스크립트 코드의 여러 객체와 값이 저장되는 곳. | 함수를 한번 호출하면 스택에 프레임으로 쌓인다. |
프레임 하나가 함수 실행 컨텍스트 하나이다. 자바스크립트는 가장 나중에 들어온 실행 컨텍스트부터 처리한다. 그리고 함수가 실행을 종료하면 메모리에서 해제한다. 이 영역은 동기식으로 실행된다.
만약 외부 API에서 콜백함수를 실행해야 될 때가 오면 이벤트 Queue에 메시지를 추가한다. 이벤트 Queue는 들어온 순서대로 처리된다. Queue의 메시지가 처리되면 다시 이것이 콜스택안의 프레임으로 들어가 순차적으로 실행된다.
아래 setTimeout을 예시로 생각해보자
function hello() {
console.log("hello")
}
setTimeout(hello, 2000); // 2초 후 실행
Step1: call stack에 함수 쌓기
setTimeout()
함수가 call stack에 쌓인다.Step2: APIs로 호출, timeout 동작 시작
Step3: timeout시간이 다 되면 콜백함수를 Queue로 보냄.