浏览器环境下,microtask的任务队列是每个macrotask执行完之后执行。而在Node.js中,microtask会在事件循环的各个阶段之间执行,也就是一个阶段执行完毕,就会去执行microtask队列的任务。
掘金原文链接
Node 的 Event Loop 分为 6 个阶段:
timers
:执行setTimeout()
和 setInterval()
中到期的callback。
pending callback
: 上一轮循环中有少数的I/O callback
会被延迟到这一轮的这一阶段执行
idle, prepare
:仅内部使用
poll
: 最为重要的阶段,执行I/O callback
,在适当的条件下会阻塞在这个阶段
check
: 执行setImmediate的callback
close callbacks
: 执行close
事件的callback
,例如socket.on('close'[,fn])
、http.server.on('close, fn)
node是事件驱动模型
事件驱动的程序,就是一个死循环,并以一个线程的形式存在,这个死循环包括两个部分,第一个部分是按照一定的条件接收并选择一个要处理的事件,第二个部分就是事件的处理过程。程序的执行过程就是选择事件和处理事件,而当没有任何事件触发时,程序会因查询事件队列失败而进入睡眠状态,从而释放cpu。
网友评论