Event loop là cơ chế cho phép Node.js đơn luồng thực hiện I/O non-blocking. Nó liên tục xử lý một hàng đợi các callback: trong khi JavaScript của bạn chạy trên một luồng, các thao tác I/O được chuyển ra ngoài, và callback của chúng được loop chạy khi chúng hoàn tất.
Các phase của loop
Mỗi vòng lặp ("tick") đi qua các phase theo thứ tự, mỗi phase có hàng đợi callback riêng:
┌───────────────────────────┐
┌─>│ timers (setTimeout) │ ← callback của các timer đã hết hạn
│ ├───────────────────────────┤
│ │ pending I/O callbacks │
│ ├───────────────────────────┤
│ │ poll (I/O events) │ ← lấy I/O mới; thực thi callback của chúng
│ ├───────────────────────────┤
│ │ check (setImmediate) │
│ ├───────────────────────────┤
└──│ close callbacks │
└───────────────────────────┘
