首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么NodeJS在民意测验阶段阻止自己?

为什么NodeJS在民意测验阶段阻止自己?
EN

Stack Overflow用户
提问于 2019-03-08 09:44:35
回答 1查看 592关注 0票数 2

来自文档

阶段概述

  1. 定时器:这个阶段执行setTimeout()和setInterval()计划的回调。
  2. 挂起回调:执行延迟到下一个循环迭代的I/O回调。
  3. 闲置,准备:只在内部使用。
  4. 轮询:检索新的I/O事件;执行与I/O相关的回调(除了close回调(计时器调度的回调和setImmediate())外,几乎所有回调除外);节点将在适当的时候阻塞在这里。
  5. check:在这里调用setImmediate()回调。近距离回调:一些
  6. 关闭回调,例如socket.on(“关闭”,.)。

在事件循环的每次运行之间,Node.js检查它是否在等待任何异步I/O或计时器,如果没有任何异步I/O或定时器,则彻底关闭。

我听不懂第四颗子弹。特别是“节点在适当的时候会阻塞这里”这一行。

在什么情况下,Node会阻止自己,为什么呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-08 10:21:30

正如在这个部分中所解释的,轮询阶段计算它将阻塞和等待I/O的时间,因此在这个阶段中,如果计时器阶段计算的时间阈值被跨越,它会执行来自计时器的回调。

如果没有跨越计时器阈值,并且轮询队列不是空的,则事件循环将遍历其回调队列,同步执行它们,直到队列耗尽或达到与系统相关的硬限制为止。

如果轮询队列为空,则还会发生以下两种情况之一:

1-如果setImmediate()已对脚本进行了调度,则事件循环将结束轮询阶段并继续到检查阶段以执行这些预定脚本。

2-如果setImmediate()没有调度脚本,则事件循环将等待回调添加到队列中,然后立即执行.

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55060510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档