Javascript는 기본적으로 싱글스레드(Single threaded programming language)이다.
여기서 싱글스레드는 간단히 말하면 한번에 하나의 작업만을 할 수 있다는 이야기이다.
그러면 다른 작업이 중간에 끼어들 수도 없고, 기존에 수행하던 작업이 끝나야만 그 다음 작업을 수행할 수 있다.
그러면 싱글스레인드인 것은 이해를 했다. 작동은 어떻게 하는 것일까?
직접 개발을 해보며 느낄때는 대부분 동시에 처리 되는것같은 느낌을 느끼게 됩니다.
브라우저 환경에는 자바스크립트 엔진과 call stack 말고도 web API와 event loop 그리고 task queue가 있어 비동기 처리가 가능합니다.
자바스크립트의 코드가 실행되면 비동기 호출에 대한 처리를 브라우저에서 web API로 넘기고 동기적인 처리를 call stack에 담아 먼저 처리하게 됩니다. 이후에 비동기 호출에 대한 처리가 끝나면 web API는 비동기 호출의 콜백 함수를 task queue에 담게 되고 Event Loop는 call stack이 비어있는지 확인하고, call stack이 비어 있다면 task queue에 있는 함수를 call stack으로 넘겨주는 역할을 합니다.