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

2021. 7. 22. 23:51·언어/Java Script
반응형

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 에서 콜백을 꺼내고(없다면 생길 때까지 기다리고)
  • 그 콜백의 처리가 끝날 때까지 실행하고
  • 이를 반복한다

반응형
저작자표시 비영리 변경금지 (새창열림)

'언어 > Java Script' 카테고리의 다른 글

자바스크립트 기초 이론 - 패캠 node.js 바탕 기본 3  (0) 2021.08.01
자바스크립트 기초 이론 - 패캠 node.js 바탕 기본 2  (0) 2021.08.01
[JavaScript - jQuery] value 값으로 select 박스 option 선택하기 + Syntax error, unrecognized expression 에러  (0) 2020.12.15
[Java Script] input 입력 값 자동으로 더하는 법  (0) 2020.12.10
[JAVA Script] console.log( ) 와 document.write( ) 차이점  (0) 2020.11.26
'언어/Java Script' 카테고리의 다른 글
  • 자바스크립트 기초 이론 - 패캠 node.js 바탕 기본 3
  • 자바스크립트 기초 이론 - 패캠 node.js 바탕 기본 2
  • [JavaScript - jQuery] value 값으로 select 박스 option 선택하기 + Syntax error, unrecognized expression 에러
  • [Java Script] input 입력 값 자동으로 더하는 법
쟈누
쟈누
Ad astra per aspera
    반응형
  • 쟈누
    쟈누의 기록공간
    쟈누
  • 전체
    오늘
    어제
    • 분류 전체보기 (444)
      • AWS (31)
        • Glue (4)
        • S3 (1)
      • 클라우드 (0)
      • Data Engineering (37)
        • GitHub (10)
        • NiFi (11)
        • Spark (10)
        • Snowflake (0)
        • 머신러닝, AI (6)
      • 언어 (118)
        • 데이터 베이스 (42)
        • JAVA (9)
        • Python (34)
        • Java Script (15)
        • Linux (18)
      • 프로젝트, 인강 그리고 책 (30)
        • Spotify Project (7)
        • RASA chatbot Project (9)
        • Naver shopping Project (6)
        • 빅데이터를 지탱하는 기술 (8)
      • OLD (56)
        • IT 용어 사전 (13)
        • Front End (12)
        • Back End (31)
      • Error code 모음 (165)
        • 1. SQL errors (17)
        • 2. Hadoop errors (20)
        • 3. Linux Errors (14)
        • 4. Python errors (33)
        • 5. JAVA, Spring errors (41)
        • 6. Jav Script errors (10)
        • 7. Dev Tools errors (9)
        • 8. Git errors (8)
        • 9. Jenkins Errors (4)
        • 10. airflow Errors (2)
        • 11. Aws errors (7)
      • 개인 (1)
        • 책 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 블로그 관리
    • 글쓰기
  • 링크

  • 공지사항

    • 간단한 블로그 소개
  • 인기 글

  • 태그

    Spring
    java
    NiFi
    설치
    node
    AWS
    install
    Git
    MySQL
    파이썬
    error
    linux
    자바
    python error
    에러
    리눅스
    json
    Python
    API
    SQL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
쟈누
자바스크립트 기초 이론 - 패캠 node.js 바탕 기본 이론
상단으로

티스토리툴바