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단계)
- Timer ex) setTimeOut
- Pending Callbacks
- Idle, Prepare 시스템 고유 영역
- Poll
- Check
- 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 작업 병렬처리