Senior #event-loop#libuv#phases
Các pha (phases) của event loop trong libuv hoạt động ra sao?
⚡ Trả lời nhanh
Mỗi vòng lặp libuv đi qua: timers, pending callbacks, idle/prepare, poll (chờ và xử lý I/O), check (setImmediate), close callbacks. Giữa các callback, Node xả hết hàng đợi microtask (nextTick rồi Promise).
| Pha | Chạy gì |
|---|---|
| timers | Callback setTimeout/setInterval đã đến hạn |
| pending callbacks | Một số callback lỗi hệ thống (TCP error…) hoãn từ vòng trước |
| idle, prepare | Nội bộ libuv |
| poll | Lấy sự kiện I/O mới, chạy callback I/O; chặn chờ nếu không có gì khác |
| check | Callback setImmediate |
| close callbacks | socket.on('close')… |
Quy tắc: poll chỉ chờ khi chưa có setImmediate và chưa có timer đến hạn; nếu có setImmediate, loop chuyển sang check ngay. Timer có độ trễ tối thiểu, không đảm bảo chính xác.
Trong sandbox trình duyệt không có setImmediate, nhưng thứ tự microtask trước macrotask vẫn giống Node:
main.js · sửa được