MST

星途 面试题库

面试题:网络编程之Node.js事件循环机制基础

请简要描述Node.js事件循环机制中各阶段(timers、I/O callbacks、idle, prepare、poll、check、close callbacks)的主要功能,并举例说明在实际开发中,哪个阶段可能会处理数据库查询的回调?
16.1万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

timers 阶段

  • 功能:这个阶段会执行 setTimeout()setInterval() 设定的回调函数。Node.js 会检查是否有到期的定时器,如果有,就将对应的回调函数放入这个阶段的执行队列中执行。

I/O callbacks 阶段

  • 功能:执行几乎所有的 I/O 回调,除了 close 事件的回调、setTimeout()setInterval() 设定的回调,以及 setImmediate() 设定的回调。比如读取文件完成后的回调等会在此阶段执行。

idle, prepare 阶段

  • 功能idleprepare 这两个阶段主要是 Node.js 内部使用,开发者一般不需要直接关注。idle 用于 Node.js 内部一些准备工作,prepare 为下一个 poll 阶段做准备。

poll 阶段

  • 功能:这是事件循环中非常重要的阶段。如果没有设定定时器,事件循环将在此阶段等待新的 I/O 事件,一旦有新的 I/O 事件到来,其回调函数会被立即执行。如果有定时器到期,事件循环将暂停 poll 阶段,进入 timers 阶段执行到期的定时器回调。

check 阶段

  • 功能:此阶段会执行 setImmediate() 设定的回调函数。setImmediate() 会将回调函数放入这个阶段的队列中,在下一轮事件循环时执行。

close callbacks 阶段

  • 功能:执行一些关闭相关的回调函数,比如 socket.on('close', ...) 的回调。

在实际开发中,数据库查询的回调通常会在 I/O callbacks 阶段处理,因为数据库查询本质上也是一种 I/O 操作,当数据库查询完成后,其回调函数会被放入 I/O callbacks 队列等待执行。