JS엔진은 하나의 실행 컨텍스트 스택을 가진다.
동기 처리: 실행중인 태스크가 종료될 때까지 다음 태스크가 대기하는 방식
비동기 처리: 종료되지않더라도, 다음 태스크를 실행하는 방식
이벤트 루프: 비동기 방식의 동시성을 지원하는 모델이다.
브라우저 환경
JS 엔진은 싱글 스레드로 동작하지만, 이를 실행시키는 브라우저는 멀티 스레드로 동작하므로 비동기 처리가 가능하다.
Node.js 환경
Node.js 환경은 싱글 스레드이지만, libuv 라이브러리와 커널을 통해 비동기 처리가 가능하다.