nodejs的一轮事件循环包含六个阶段:
timer:执行所有的setTimeout setInterval回调;
I/O callbacks:执行除了timer的回调和check阶段调用的回调;
idle(空转):node内部执行;
poll:轮询阶段 检索新的I/O事件;
进入到poll阶段以后,
如果没设置timer:
如果poll queue不为空,event loop将同步执行queue里面的回调,直到poll queue为空,
当poll queue为空时:
如果设定了setImmeadiate,poll queue将进入check阶段;
如果没设定setImmeadiate,则会阻塞在poll queue阶段;poll会一直等待新的回调进入,一旦到达
立即执行;
设置了timer:
poll进入空闲阶,event loop 会去检查timer,如果有一个或多个timer到了时间,event loop将会进入下一次循环 按顺序执行timer queue;
check:执行setImmeadiate 回调;
close callback:关闭函数;