최상위 10_Wiki/Topic_*였던 4개 카테고리 폴더를 10_Wiki/Topics/Topic_* 로 재배치.
콘텐츠 변경 없음(순수 폴더 이동) — Topics/ 하위 나머지 폴더는 이미 지난 커밋에서
전부 정리된 상태(잔존 항목은 에이전트 운영 상태 및 사용자가 보존을 요청한
업데이트0615/무제 3.canvas 뿐).
"매 single-threaded JS 가 매 cooperative scheduler 위에서 매 async 를 흉내낸다.". Call stack + task queue + microtask queue + render pipeline 이 매 tick 의 단위. Promise/async-await 는 매 syntactic sugar — runtime 은 매 microtask drain rule 로 결정.
매 핵심
매 Stack vs Queues
Call stack: 매 동기 frame. LIFO. 매 비어야 매 tick 진행.
Task queue (macrotask): setTimeout, setInterval, MessageChannel, I/O callback, UI event. 매 tick 당 1개 drain.
Microtask queue: Promise.then, queueMicrotask, MutationObserver. 매 tick 마지막에 매 전부 drain (재진입 포함).
Animation frame queue: requestAnimationFrame. 매 paint 직전.
Render steps: style → layout → paint → composite. 매 vsync 와 매 동기화.
// BAD — recursive Promise.resolve() blocks rendering
functionbad(){Promise.resolve().then(bad);// browser never paints
}// GOOD — use setTimeout(0) or MessageChannel for yielding
functiongood(){setTimeout(good,0);}
Event loop lag monitor (Node)
import{monitorEventLoopDelay}from'node:perf_hooks';consth=monitorEventLoopDelay({resolution:20});h.enable();setInterval(()=>{console.log('p99 lag ms',h.percentile(99)/1e6);h.reset();},1000);