1. node.js初始化
初始化event loop -> 执行server.js文件 -> 进入event loop
2. eventLoop循环过程
eventLoop.png3. poll阶段
poll.png4. check阶段
大部分情况都是先执行check阶段的setImmediate(),再执行timer阶段的setTimeout(),因为poll之后就是check,只有在第一次启动的时候!才可能会先执行timer。
因为setTimeout()的最短时间是4ms(即使你设置0),而node.js的初始化过程是
初始化eventLoop -> 执行server
.js -> 进入eventLoop,在执行server.js到进入eventLoop这段时间若大于4ms则会先执行timer,若没到4ms的话,就不会先执行timer的setTimeout(),
5. nextTick()
setTimeout(()=>{
console.log('1')
})
setImmediate(()=>{
console.log('2')
})
process.nextTick(()=>{
console.log('3')
})
会先执行3,在进入eventLoop之前,和eventLoop里进入每一个阶段之前都会先调用一次nextTick()
网友评论