Nodejs事件轮询详解 https://www.jianshu.com/p/32ab3eb74e3a
setImmediate( ()=>{
console.log('setImmediate()执行了');
} )
setTimeout(()=>{
console.log('setTimeout()执行了');
} ,0 )
process.nextTick(()=>{
console.log('process.nextTick()执行了');
} )
//执行结果
process.nextTick()执行了
setTimeout()执行了
setImmediate()执行了
nodejs的事件轮询机制: 借助libuv库来实现的
事件轮询机制主要分为六个阶段:
1.timers 计时器阶段
负责计时和执行到点的定时器回调函数
2.pending callbacks
负责某些系统操作(如tcp错误类型)的回调函数,我们不做研究
3.idle ,prepare
负责准备工作,我们不做研究
4.poll 轮询阶段(轮询队列),分为以下情况
-如果轮询队列不为空,依次同步取出轮询队列中第一个回调执行,知道轮询队列为空或者达到系统最大的限制
-如果轮询队列为空
--如果之前设置过setImmediate函数
---直接进入下一个check阶段
--如果之前没有设置过setImmediate函数
---在当前poll阶段等待
直到轮询队列添加回调函数,就去第一个情况执行
--如果定时器到点了,也会去下一个阶段
5.check 查阶段
执行setImmediate设置的回调函数
6.close callbacks 关闭阶段
执行close时间回调函数
关于process.nextTick
process.nextTick能在任意优先阶段先执行