Node.js Event Loop各阶段具体是怎样的运行机制?

2026-04-09 00:570阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计973个文字,预计阅读时间需要4分钟。

Node.js Event Loop各阶段具体是怎样的运行机制?

Event Loop 阶段描述图 + timers 阶段处理 setTimeout 与 setInterval 回调,开始处理的时机与 poll 阶段有关联。pending callbacks + 应该阶段执行的系统操作回调,如 TCP 套接字在连接时收到 ECONNREFUSE。

Event Loop阶段描述图

timers

timer阶段处理setTimeout于setInterval回调,开始处理的时机与poll阶段有关联。

pending callbacks

该阶段执行某些系统操作的回调,比如TCP套接字在连接时收到ECONNREFUSED。

网上有一些将该阶段称为I/O callbacks的文章都是过时错误的,具体可以移步Node.js官方库下面的这个issue: #1118。

idle, prepare

内部使用,忽略。

poll

poll是一个核心阶段,等新I/O事件的触发,以及执行I/O相关回调。Node.js中出现异步的绝大部分情况都是I/O操作,它们的回调基本都在这个阶段被执行。

poll阶段主要做两件事:

  • 计算需要为新的的I/O事件等待多久

当进入poll阶段,如果队列为空且不存在setImmediate与就绪的timer,Node.js会在这里block一定的时间等待新的I/O事件到来,然后立即执行其回调。

阅读全文

本文共计973个文字,预计阅读时间需要4分钟。

Node.js Event Loop各阶段具体是怎样的运行机制?

Event Loop 阶段描述图 + timers 阶段处理 setTimeout 与 setInterval 回调,开始处理的时机与 poll 阶段有关联。pending callbacks + 应该阶段执行的系统操作回调,如 TCP 套接字在连接时收到 ECONNREFUSE。

Event Loop阶段描述图

timers

timer阶段处理setTimeout于setInterval回调,开始处理的时机与poll阶段有关联。

pending callbacks

该阶段执行某些系统操作的回调,比如TCP套接字在连接时收到ECONNREFUSED。

网上有一些将该阶段称为I/O callbacks的文章都是过时错误的,具体可以移步Node.js官方库下面的这个issue: #1118。

idle, prepare

内部使用,忽略。

poll

poll是一个核心阶段,等新I/O事件的触发,以及执行I/O相关回调。Node.js中出现异步的绝大部分情况都是I/O操作,它们的回调基本都在这个阶段被执行。

poll阶段主要做两件事:

  • 计算需要为新的的I/O事件等待多久

当进入poll阶段,如果队列为空且不存在setImmediate与就绪的timer,Node.js会在这里block一定的时间等待新的I/O事件到来,然后立即执行其回调。

阅读全文