Skip to content

Node 事件循环 #52

Open
Open
@myLightLin

Description

@myLightLin

对于 Node 的事件循环,官网上的这篇文章介绍得非常详细,值得一读:The Node.js Event Loop, Timers, and process.nextTick()

事件循环六个阶段

分别是:

  • timers
  • pending callbacks
  • idle, prepare
  • poll
  • check
  • close callback

timer 阶段:主要就是执行 setTimeout,setImmedaite 的回调函数
pending callback 阶段:一些延迟到下个循环执行的 IO 回调,比如 TCP 连接错误要重连,相关回调会被调度至这个阶段执行
idle,prepare: 仅供内部执行
poll 阶段:非常重要的阶段,所有 io 事件都会在这里被检索执行,Node 会适当在这里阻塞,这个阶段会做两件事:

  1. 计算需要阻塞多长时间来处理 io
  2. 执行 poll 队列里的事件,具体过程是:如果 poll 队列不为空,那么取出遍历执行所有事件回调,直到队列为空或者达到最大执行限制;如果 poll 队列为空了,那么会去看这个脚本是不是被 setImmedaite 调度执行的,如果是,立马结束 poll 阶段,转到 check 阶段去执行 setImmedaite 的回调;如果不是,那么就会等待回调被添加至消息队列,然后立即执行它。

此外,当 poll 队列为空时,还会去检查 timers 阶段设置的定时器到期了没,如果是的话会转去 timers 阶段执行定时器的回调。所以说,这个 poll 阶段是 Node 事件循环的核心。
check 阶段:前面说了,就是执行 setImmedaite 的回调
close callback: 一些关闭操作,比如 socket 的连接断开处理。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions