시간이 걸리는것들은 바로 실행되지 않고 다른 공간에서 따로 실행된다.
스택(CallStack)은 차곡차고 쌓이고 먼저 들어온게 나중에 나가지만 큐(TaskQueue)는 먼저 들어오는 순서대로 바로 나가게된다.
CallStack에서 실행이 되다가 시간이 걸리는것들은 Background(WebAPI)로 빠지고 거기서 실행하게되는데 결과가 나오면 이제 Queue로 들어가게 된다. 거기서 대기하고 있다가
CallStack이 비워지게되면 TaskQueue에서 CallStack으로 들어가 실행되게된다.
이러한 과정을 이벤트 루프라고 부르고 이벤트 루프를 동작하게하는 일꾼을 쓰레드(이벤트루프 쓰레드,싱글 이벤트루프 쓰레드)라고 부른다.
쓰레드와 프로세스
프로세스 : 하나의 프로그램
쓰레드 : 일꾼
자바스크립트는 싱글쓰레드이고 다른 언어들은 대부분 멀티쓰레드이다.
axios나 mutation을 요청하면 싱글쓰레드가 요청을 보내고 결과를 받아오고 그와 관련된 일을 하는 동안 다른 동작은 못하게된다. 자바스크립트는 이것을 이벤트 루프를 통해 해결하였다.
멀티쓰레드의 경우 코드를 사용해서 쓰레드를 만들 수 있고 여러가지 일을 동시에 처리할 수 있다. 엄밀히 말하면 동시에 처리하는 것은 아니고 결국 일은 CPU가 하는것이다. 만약에 일꾼 4명에 CPU가 4코어이면 동시에 처리하는 것이지만 그게 아니라면 CPU 혼자서 일꾼을 하나씩 빠르게 컨트롤하는 것이다. 빠르게 컨트롤 하기 때문에 동시에 처리하는 것처럼 보이는 것이다.
한가지 일을 완전히 끝내고 다음 일꾼으로 넘어가는것이 아니라 일하다가 중간에 저장하고 다음 일꾼으로 넘어가 중간에 저장하고 계속 저장과 넘어감(context-switching)의 반복이다.