[WEB] Event Loop 01 자바스크립트 런타임 환경

📄 자바스크립트 런타임 환경

JavaScript는 Single Threaded Language체제로 돌아가는 언어이며 다른 언어들과 다르게 언어 자체에 멀티스레딩이 없습니다.

하나의 프로세스가 하나의 일만 처리한다는 뜻입니다.

하지만, 브라우저 안에는 여러가지 스레드가 들어있습니다.

따라서 JavaScript가 아닌 브라우저의 WEB API를 이용해서 멀티스레딩을 합니다.

📄 자바스크립트는 어떻게 돌아갈까?

작성한 웹 어플리케이션이 브라우저에 올라가는 순간, 자바스크립트의 웹 엔진이 작성한 소스코드를 한 줄 한 줄씩 해석합니다.

자바스크립트 엔진의 구조는 다음과 같다.

  1. Memory Heap
  • 선언된 변수들의 메모리 할당이 이루어진다.
  • 비구조적으로 데이터가 저장된다.
  1. Call Stack
  • call stack에는 함수들이 실행하는 순서에 따라 차곡차곡 쌓인다.
  • LIFO(선입후출) 자료구조 형식으로 일처리가 진행된다.
function second() {
  console.log("hello");
  return;
}
function first() {
  second();
  return;
}
function main() {
  first();
  return;
}
main();

위 코드의 실행이 콜스택에 쌓이는 과정은 다음과 같습니다.

콜스택

▪ 재귀함수

함수안에서 자기 자신을 계속 부르는 것을 재귀함수라고 한다.

function endless() {
  endless();
}
endless();

이 코드를 실행시키면 Call Stack에는 무한으로 데이터가 쌓이게 됩니다.

상황에 따라 유용하게 쓸 수 있지만 지정된 콜스택 사이즈를 초과하면 에러를 발생시키므로 주의해야 한다.

출처

Leave a comment