← All writing
Development

Section2 node.js note taking

note taking 정리는 되어있지 않음

V8 메커니즘

  • Node.js 언어가 아닌 runtime
  • 메모리 관리 방식 garbage collection
  • 저전력 설계 기반 ARM, 고성능 연산 중심 x86

Node.js V8 + C++ (Application)

  • BFF Backend For Frontend
  • 무중단 배포 zero-downtime deployment
  • AOT Ahead Of Time JIT Just In Time
  • 바이트 코드: 기계어 직전 단계 효율적인 중간 언어
  • 동기 synchronous 비동기 asynchronous
  • C10K Concurrent 10k users
  • 서버의 물리적 성능을 높이는 scalse up
  • 서버의 대수를 늘리는 scale out
  • context switching overhead ➡️ thrashing

Event loop (?) Call Stack

  • Event Queue : OS 완료 작업 컨베이어 벨트
  • Process는 Thread를 포함한다
  • Memory Heap
  • 단일 콜스택 Call Stack LIFO Last In First Out
  • libuv thread pool

CallStack LIFO ↔️ Event Loop ↔️ EventQueue FIFO

  • Queue의 분리 (6단계)
  1. Timer ex) setTimeOut
  2. Pending Callbacks
  3. Idle, Prepare 시스템 고유 영역
  4. Poll
  5. Check
  6. Close Callbacks

Microtask Queue 긴급

  • Promise 1순위 < process.nextTick 0순위
  • Starvation 기아현상: 전체가 멈춤

JS는 단일 Call Stack을 가진 Single Thread 언어

  • Synchronous ➡️ nextTick (VVIP) ➡️ Promise (VIP) ➡️ Timer
  • libuv ➡️ ThreadPool
  • 작성 순서가 아닌 Queue의 계급이 순서를 결정한다.

Timers ➡️ Pending ➡️ Idle/Prepare ➡️ Poll ➡️ Check ➡️ Close

  • Phase 이동 중 ? Queue의 개입
  • VVIP 결재함 process.nextTick
  • VIP 결재함 MicroTask Queue(Promise)

병목의 극복 libuv(하청업체)

  • 단일콜스택의 한계를 백그라운드 위임으로 ?
  • 우선순위와 새치기 Interruption Mechanism

Node.js의 핵심부품 Call Stack, Event Queue, Event Loop

  • 동기코드 synchronous
  • nextTick Queue
  • Microtask Queue
  • 일반 정거장 Queue

Quiz 정리

  • Node.js 는 데이터 입출력 I/O가 많은 실시간 서비스에 탁월
  • 왜? 비동기 논블로킹 방식
  • Event loop는 Call Stack이 완전 Empty상태일 때 Event Queue의 Callback을 가져다 실행 ➡️ 결과적으로 thread 의 유휴 상태 유지
  • libuv 쓰레드 풀 ➡️ 무거운 I/O 작업 병렬처리