node事件循环

栏目 Node.js
  • node 的 event-loop 分6个阶段,反复运行。
  • 进入某一个阶段,会从对应的回调里取出函数去执行。
  • 当队列空,或执行的回调函数数量达到系统设定的阈值,就进入下一阶段

阶段:

  • timers 定时器
  • pending callbacks 读写回调函数
  • idle, prepare 内部
  • poll -- connections 轮询
    • incoming
    • date, etc.
  • check
  • close callbacks

这里去官网看文档。 timers 执行 setTimeout setInterval 由poll阶段控制的。

I/O

I/O 阶段会处理一些上一轮循环中的少数未执行的 I/O 回调

idel, prepare 内部实现,先忽略

poll 重要,会做两件事情:

  1. 回到 timer 阶段执行回调
  2. 执行 I/O 回调

这部分来自狼书

  • 事件循环机制
    • eventloop 是 libuv的核心
    • 为了更好理解事件循环
      • 队列管理
        • process.nextTick() 入列
        • process._tickCallback 出列
      • 合适时候加入操作
        • timers
        • setImmediate()
        • io
    • 微任务microtask 和 宏任务 macrotask
      • 当前调用栈执行完毕,先处理 微任务,然后在宏任务取出一个事件并执行
        • 我们看了一个demo,需要小心推断
          • 先处理简单的,异步的部分 promise 为微任务 set系列为任务,进入任务队列
          • 经过事件循环,先执行微观,遇到宏观按顺序执行
    • process.nextTick(callback)是用于事件循环的下一次循环调用函数的。和 set p173