Node.js中的事件循环

以前总结过浏览器中的事件循环,在 Node.js 中也有本身的事件循环,但与浏览器不同,在 Node.js 中有 5 个宏任务队列,分别是:浏览器

  1. 计时器队列,里面存放 setTimeout 和 setInterval 函数添加的回调
  2. 系统相关回调队列,例如端口监听、进程资源占用
  3. IO 事件队列,里面存放 I/O 事件回调,这是 Node.js 异步非阻塞的关键
  4. 当即执行队列,里面存放 setImmediate 函数添加的回调
  5. 关闭操做队列,里面存放 close 事件处理回调

除了上面 5 个宏任务队列,还有 2 个微任务队列,分别是:异步

  1. nextTick 回调队列,即便用 process.nextTick() 函数添加的回调
  2. 其余微任务队列,列如 Promise、queueMicrotask 等

几个注意点:函数

  • 在 NodeJS 中不止一个队列,不一样类型的事件在它们本身的队列中入队。
  • 每一个宏任务阶段在清空该阶段的任务以后,在移向下一个阶段以前,都要去清空两个微任务队列
  • nextTick 微任务队列优先级最高,先清空 nextTick 回调队列再清空其余微任务队列
  • 清空其余微任务队列以后,还要再检查一遍 nextTick 回调队列,确保其已被清空

图示以下:post

Node.js事件环
相关文章
相关标签/搜索