[JS] node의 비동기 처리방법

ShinJuYong·2022년 7월 19일
0

기술면접

목록 보기
4/4

js는 동기언어이다

  • js는 싱글 스레드로 구성이 되어있어서 한번에 1가지 작업밖에 하지 못하는 동기 프로그래밍 언어이다.

  • js가 싱글 스레드이지만 비동기 처리가 가능한 이유

    • 자바스크립트가 실행될때는 4가지 요소가 실행을 도와준다
      • Javascript Engine (V8)

        Heap : 구조화가 되지 않은 형태로 객체들과 변수들의 메모리 할당이 이루어진다
        Call Stack : js에서 수행해야하는 함수들을 순차적으로 스택에 담아 실행한다.

      • Web API

        웹 브라우저가 제공하는 api로 ajax라던지 비동기 작업들을 실행한다

      • Callback Queue

        Web APIs에서 실행된 비동기 함수들이 실행된 후, 기다리는 곳이다

      • Event Loop

        수시로 Callback Queue를 체크하며 존재하는 경우 Call Stack이 비어있을때 CallBack Queue를 Call Stack에 넘겨준다.

  • 위의 내용을 다시 정리하자면 아래와 같다

    1. 함수 10개를 호출한다
    2. Call Stack에서 함수 10개를 순차적으로 실행한다
    3. Event Loop는 Callback Queue를 계속 확인한다
    4. setTimeout()과 같은 비동기 함수들이 선언이 됐다
    5. CallBackQueue에 setTimeout이 생긴다
    6. Call Stack이 비어있는 순간 Event Loop로 setTimeout()이 실행돤다.

그래서 Async와 Await는?

node.js는 서버가아닌 JS를 작동시키는 런타임이다

  • Node.js는 크게 2가지의 특징을 가지고 있다
    • 싱글 쓰레드 & 논 블로킹

      작업이 완료되지 않았지만 막지 않는다
      즉, 싱글스레드임에도 비동기 Input - Output처리가 가능하다

    • 이벤트 기반 동작

      이벤트 발생순서로 처리를 한다
      발생한 순서대로 콜백함수를 저장하며 순서대로 실행한다
      이것은 Event Loop가 CallBack Queue에 저장하고, 스택에 넣어 작동시키기 때문

  • 이러한 장점으로 멀티 스레드를 사용하지않으며, 논블로킹을 쓰기에 엄청나게 빠른 속도로 처리를 할 수 있다.

0개의 댓글