nodejs事件轮询机制
//nodejs时间轮询机制 此程序为JS文件,要在nodejs环境中运行
setTimeout(function(){
console.log('setTimeout被执行')
},0)
setImmediate(function(){
console.log("setImmediate被执行")
})
process.nextTick(function(){
console.log("processs.nextTick被执行")
})
// 执行顺序为
// processs.nextTick被执行
// setTimeout被执行
// setImmediate被执行
// 底层实现 借助 libuv(一个C语言写的库) libuv/src/unix/core.c中的uv_run
// 时间轮轮询机制分为6个阶段
// 1.timers 定时器阶段
// 计时和执行到点的定时器回调函数
// 2.pendding callbacks
// 某些系统操作(例如TCP错误类型)的回调
// 3.idle.prepare
// 准备工作
// 4.poll 轮询阶段
// 如果轮询队列不为空,依次同步取出轮询队列中的第一个回调函数执行,直到轮询队列为空或者达到系统最大的限制
// 如果轮询队列为空
// 如果之前设置过setImmediate函数
// 直接进入到下个check阶段
// 如果没有设置过setImmediate函数
// 在当前poll阶段等待
// 直到轮询队列添加回调函数,就去第一个情况执行
// 如果定时器到点了,也会去下个阶段
// 5.check 检查阶段
// 执行setImmediate设置的回调函数
// 6.close callbacks 关闭阶段
// 执行close事件回调函数