4
where most of your async code actually executes
1
First — drain the poll queue:
fs.readFile
http request
socket data
dns.lookup
then, if the queue is empty — in order:
2
if setImmediate
is pending → jump to Check
3
else if a timer expired → next iteration Timers
4
else → block here and wait for new I/O