</>
⌕
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).

PhaChạy gì
timersCallback setTimeout/setInterval đã đến hạn
pending callbacksMột số callback lỗi hệ thống (TCP error…) hoãn từ vòng trước
idle, prepareNội bộ libuv
pollLấy sự kiện I/O mới, chạy callback I/O; chặn chờ nếu không có gì khác
checkCallback setImmediate
close callbackssocket.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
🃏 Ôn bằng flashcard