Node的Event Loop:6个阶段

  1. timer阶段
    执行到期的setTimeout / setInterval队列回调。

  2. I/O阶段
    执行上轮残留的callback。

  3. idle,prepare
    这个阶段仅在内部使用,可以不必理会。

  4. poll
    等待回调。
    a、执行回调
    b、执行定时器
    如果有遇到setTimeout / setInterval,则返回到timer阶段。如果遇到setImmediate,则前往check阶段。

  5. check
    执行setImmediate()的回调函数。

  6. close callbacks
    例如:socket.on(‘close’, …)这种close事件的回调。

NodeJs与浏览器的区别:
nodejs的Macro Task分为好几种,而这几种又有不同的task queue,而不同的 task queue又有顺序区别,而Micro Task是穿插在每一种Macro Task之间的。
setTimeout / setInterval 属于timer类型;
setImmediate 属于 check类型;
socket的close事件属于close callbacks类型;
其他的Macro Task 属于poll类型;
process.nextTick本质上属于Micro Task,但是它先于所有其他的Micro Task 执行;
所有Micro Task 的执行时机,是不同类型Macro Task 切换的时候;
举一个例子:
Node的Event Loop:6个阶段_第1张图片
此代码在浏览器环境下输出:
在这里插入图片描述
但是在nodejs则会输出:
在这里插入图片描述

你可能感兴趣的:(nodejs的事件循环,nodejs的Event,Loop,node,Event,Loop)