在Node.js中,事件循环是一个非常重要的概念。事件循环是指Node.js在执行异步操作时,采用的一种事件驱动的机制。通过事件循环,Node.js可以实现高效的I/O操作,同时也可以避免出现阻塞或死锁的情况。
了解事件循环对于Node.js开发者来说非常重要,因为它涉及到Node.js的异步编程模型和运行机制。在本文中,我们将深入探讨Node.js事件循环的概念、运行机制和实现原理。
事件循环阶段
Node的事件循环分为多个阶段
- timers阶段
- pending/callback阶段
- idea阶段
- poll阶段
- check阶段
- close阶段
- times阶段:执行setTimeout 和 setInterval的回调函数
- pending/callback阶段:执行延迟到下一个循环迭代的I/O回调
- idle:仅系统内部调用
- poll:检索新的I/O事件,大部分I/O事件的回调在这里运行,清空队列以后,会去查询是否有setImmediate的调度,若有,则会等待setImmediate加入队列,然后执行,若没有setImmediate的调度,则会去检查是否有timers阶段的调度,若有,则会等待计时器加入队列,然后绕回到timers阶段进行执行,如果没有timers的调度,事件循环会阻塞在poll阶段
- check:setImmediate的回调函数在这里执行
- close:关闭阶段的回调函数执行,比如socket的关闭
Node不同版本微任务的不同
V11后:微任务的执行顺序和浏览器保持一致,每个宏任务结束以后查询是否有微任务
V11前:阶段结束后,去查询是否有微任务
process.nextTick的优先级比微任务高
本文作者:BARM
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA
许可协议。转载请注明出处!