[nodejs‑1]자바스크립트 핵심 구조

비동기 코드 / 호출 스택

호출 스택이란 함수가 호출되면 스택에 쌓이는 것을 의미한다.

그러나실제 호출 스택으로는 밑에 코드와 같이 비동기 함수의 작동은 알 수 없다.

function run(){
  console.log("3초 후 실행");
}
console.log("시작")
setTimeout(run, 300); # 대포적인 비동기 함수
console.log("끝")

이벤트 루프 원리

  • set­Time­out과 같은 비동기 함수를 이해하기 위해서는 다음과 같은 구조를 이해하고 있어야 한다.
function run(){
  console.log("3초 후 실행");
}
console.log("시작")
setTimeout(run, 300); # 대포적인 비동기 함수
console.log("끝")
  1. 메모리에 run 함수가 올라온다.
  2. console.log("시작") 호출 스택에 올라온다.
  3. 시작 출력
  4. console.log("시작") 호출 스택에서 빠져나간다.
  5. setTimeout(run, 300);호출 스택에 올라온다.
  6. 백그라운드타이머(run, 3초)가 올라온다.
    • 호출스택이 실행되면서 백그라운드도 동시에 실행된다.
    • 백그라운드에 갈 수 있는 함수는 매우 제한적이다.
      • ex set­Time­out(), class Promise, etc..
  7. console.log("끝") 호출 스택에 올라오고 을 출력 그리고 console.log("끝") 호출 스택에서 빠져나간다.
  8. 백그라운드타이머(run, 3초) 함수가 3초가 끝나면 run 함수태스크 큐에 올라온다.
  9. 태스크 큐는 호출 스택이 비어있으면 run 함수 를 호출 스택에 올린다.

설명은 간략화 했지만 실제는 복잡한 코드로 구현되어 있다.

백그라운드에 우선순위

  • 내용이 어려워서 나중에 다시 기록한다. 인프런 8강 13분~
  • Promise. the/catch
    process.nextIck 등은 setTimeout()와 같이 태스크 큐에 들어가면 set­Time­out이 가장 늦게 실행된다.
function oneMore(){
    console.log('one more');
}
function run(){
    console.log('run run');
    setTimeout(() => {
      console.log('wow');
    }, 0)
    new Promise((resolve) => {
      resolve('hi');
    })
     .then(console.log);
    oneMore();
}

setTimeout(run, 5000);

[nodejs‑1]자바스크립트 핵심 구조”의 1개의 생각

  1. 핑백: Express앱에서 미들웨어 사용하기 - CherryPichu 블로그

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다