언어/Java Script

자바스크립트 기초 이론 - 패캠 node.js 바탕 기본 이론

쟈누이 2021. 7. 22. 23:51
반응형

1. 자바스크립트와 event loop



- node 를 잘 이해하기 위해서는 자바스크립트의 동시성 모델에 대해 잘 이해해야 한다
- 자바 스크립트의 실행 모델은 event loop, call stack, callback queue 개념으로 이뤄진다

 

 


1) event loop, main thread


  • 이벤트 루프 모델은 여러 스레드 사용
  • 우리가 작성한 js 코드가 실행되는 스레드를 메인 스레드라 부름
  • 한 node.js 프로세스에서 메인 스레드는 하나이며, 한 순간에 한줄씩만 실행
  • 그외 일(file i/o, network..) 을 하는 워커 스레드는 여럿이 있을 수 있다.

 

 


2) call stack


 지금 시점까지 불린 함수들의 스텍, 함수가 호출될 때 쌓이고, 리털할 때 빠짐

강의 이미지 일부 캡처

 

 


3) Run to completion


강의 이미지 일부 캡처

  • call back 을 어떤 요인에 의해 실행되며 call stack 이 하나 하나 쌓임
  • 이벤트 루프가 다음 콜백을 처리하려면 지금 처리하고 있는 콜백의 실행이 완전히 끝나야 한다
  • call stack 이 완전히 빌 때까지 처리한다는것과 의미가 동일함.
  • 이런 자바스크립트 실행엔진의 특성을 run to completion 이라 불림

 

 


4) callback queue


강의 이미지 일부 캡처

  • queue : 맨처음 들어온게 맨 처음 나가는 자료구조
  • 콜백 큐(메시지 큐)는 앞으로 실행할 콜백(함수의 그 인자)들을 쌓아두는 큐이다.
  • 콜백은 브라우저나 node 가 어떤 일이 발생하면(event) 메인 스레드에 이를 알려주기 위해 (callback) 사용
  • 이벤트는 파일 처리의 완료, 네트워크 작업의 완료, 타이머 호출 등이 잇음
  • 콜스택이 빌때까지 기다렸다가 콜스택이 비면, 콜백큐에서 하나씩 꺼내서 이벤트 실행

 

 


5) non-blocking I/O & offloading


강의 이미지 일부 캡처

  • 브라우저나 node.js 에서나, web api 혹은 node api 의 동작이 끝나면 callback queue 에 등록한다.
  • 브라우저나 node가 요청받은 일을 하고 있는 동안 메인 스레드와 이벤트 루프는 영향을 받지 않고 계속 실행된다
  • 이런 현상을 offloading 이라 하며, node 서버의 메인 스레드가 하나임에도 불구하고 빠르게 동작할 수 있는 이유
  • 메인 스레드가 오래 걸리는 일을 기다리지 않기 때문에..

 


6) event loop


강의 이미지 일부 캡처

  • callback queue 에서 콜백을 꺼내고(없다면 생길 때까지 기다리고)
  • 그 콜백의 처리가 끝날 때까지 실행하고
  • 이를 반복한다

반응형