O event loop é o mecanismo que permite que Node.js de thread único execute I/O não-bloqueante. Ele processa continuamente uma fila de callbacks: enquanto seu JavaScript executa em um thread, operações de I/O são descarregadas, e seus callbacks são executados pelo loop quando completam.
As fases do loop
Cada iteração ("tick") passa por fases ordenadas, cada uma com sua própria fila de callbacks:
┌───────────────────────────┐
┌─>│ timers (setTimeout) │ ← expired timer callbacks
│ ├───────────────────────────┤
│ │ pending I/O callbacks │
│ ├───────────────────────────┤
│ │ poll (I/O events) │ ← retrieve new I/O; execute their callbacks
│ ├───────────────────────────┤
│ │ check (setImmediate) │
│ ├───────────────────────────┤
└──│ close callbacks │
└───────────────────────────┘
