node.js - Node.js 是否优先考虑 I/O 事件而不是 setTimeout()?

标签 node.js

文档对于 Node.js 如何处理 setTimeout 调度的调用不是很清楚:

Node.js makes no guarantees about the exact timing of when the callback will fire, nor of the ordering things will fire in. The callback will be called as close as possible to the time specified.

假设有一个过期的计时器。还有一些 I/O 事件等待处理。 Node.js 会选择在触发计时器之前先处理所有 I/O 事件吗?这就是 WM_TIMER 在 Windows 中的工作原理。我猜测 Node.js 可能也会有同样的行为。不然为什么会有setImmediate()呢?人们可以只使用 setTimeout() 且延迟时间为 0。

最佳答案

定时器当前在 I/O 处理程序之前进行处理。此外,如果您执行 setTimeout(fn, 0), Node 会为下一个时钟周期安排该函数。

这是一张较旧的图表,大致显示了事件循环的一个循环中发生的情况:

node.js event loop diagram

尽管一些事情,例如有关 process.maxDepth 的注释,在 Node v0.11+/iojs 中不再是这样。

关于node.js - Node.js 是否优先考虑 I/O 事件而不是 setTimeout()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28047918/

相关文章:

javascript - 将 Node 检查器与 Grunt 任务一起使用

mysql - mysql存储过程中的错误日期值错误

node.js - node http 和 express 监听区别

node.js - Typesafe Express 中间件和路由?

javascript - 如何在nodejs中使用客户端js代码

ruby-on-rails - 如何在 rails/rack 应用程序上与 node.js 实例共享身份验证?

node.js - 使用 mongoose 查找多个文档

node.js - 为什么 Stripe 付款不完整?

javascript - grunt/npm 插件 grunt-s3 + knox 未上传到 S3

node.js - 在 nodejs http 请求中获取响应 "ContentType"