자바스크립트는 single thread기반의 언어입니다. 하나의 일을 처리한 뒤 다른 일을 처리할 수 있는 언어이죠. 그치만 우리가 자바스크립트를 사용하여 api요청 등을 보냈을 때, 그렇게 작동하지 않는다는 것을 우리는 알고있습니다. 이는 event loop때문입니다.
해당 글에서는 thread가 무엇인지. event loop는 무엇인지 알아보도록 하겠습니다.
Thread
란 쉽게 말해 프로세스의 실행 가능한 가장 작은 단위를 말합니다. 즉 돌아가고 있는 프로그램이 처리할 수 있는 일의 가장 작은 단위를 말합니다. 이러한 프로그램이 갖는 스레드의 갯수에 따라 single thread
와 multi thread
로 나뉩니다.
위에서 던진 질문의 대답은 Yes
이면서 No
입니다. 이는 event loop입니다. .
js
는 callstack
이란 FILO(선입후출)인 단일 호출 스택을 가지고 있습니다.
호출스택
프로그램에서 우리가 어디에 있는지 기록하는 데이터 구조
function test(x, y) {
return x * y;
}
function testPrint(x) {
const a = test(x, 4);
console.log(a);
}
testPrint(5);
위와 같이 코드를 작성했을 때 Callstack
에서 흐름을 확인해봅시다
들어온 순서대로 처리하기에 single thread
언어입니다.
그럼 이때 의문점이 생길 것입니다.
fetch
, setTimeout
과 같은 비동기 요청을 보냈을 때 우리는 요청을 보내고 다른 작업을 할 수 있기 때문입니다.
이 대답에는 맞으면서 아니라고 할 수 있습니다. 그 이유는 비동기
때문입니다.
위의 질문에 대답을 위해 Event Loop
에 대해 알아보겠습니다.
우선 이벤트 루프는 아래 그림과 같은 구조를 갖습니다.