【发布时间】:2023-04-03 11:45:02
【问题描述】:
这是一个关于 JavaScript 内部的问题。
假设我有 10 个异步任务,它们都需要 x 秒才能运行。在等待响应时,脚本处于空闲状态。
JavaScript 引擎在后台询问“任务队列中是否有任何内容”。据我了解,这是一个循环。因此,事件循环。我知道在 Node 中这是用 Libuv 实现的。我读过这篇解释了一点的文章:https://nikhilm.github.io/uvbook/basics.html
为了平衡应用程序的性能,JavaScript 引擎是否对该事件循环的运行频率设置了任何限制?它是否以设定的时间间隔运行?
如果我有任何问题,请纠正我。我只是对这个事件循环运行的时间间隔感兴趣。
【问题讨论】:
-
它运行得尽可能快
-
如果你从一个函数中将超时设置为零,它在 V8 中每秒触发大约 250 次。其他中断源(例如 ajax)通常根本不会被“ping”,而是使用具有亚毫秒粒度的较低级别的流控制。
-
“为了平衡应用程序的性能而限制此事件循环运行的频率” - 你的意思是问他们是否人为地减慢了它?不,他们为什么要这样做?
-
@Bergi: setTimeout (et al) 是唯一一个应用粒度的“js 内部”...
-
@Bergi 根据 MDN,如果延迟值为 0,则在下一个事件周期执行该函数。
标签: javascript node.js v8 libuv