在检查事件队列/每个滴答/每个循环之前,是否有一定数量的指令语句得到处理(我想说的是同一件事?)
答案 0 :(得分:2)
在检查事件队列/每个刻度/每个循环之前,是否有一定数量的指令需要处理(我想说的是同一件事?)
不,没有。
在node.js体系结构中,当从事件队列中提取事件时,该事件与回调相关联。解释器调用该回调,然后该回调运行完毕。仅当它返回并且堆栈再次为空时,它才会检查事件队列中是否还有另一个事件要运行。
因此,它与许多指令完全无关。 node.js以单线程方式运行Java脚本,因此没有时间在Java片段之间进行切片,这听起来像是您的问题可能正在预料之中。一旦调用了与事件队列中偶数相对应的回调,该回调将一直运行到完成为止,然后将控制权返回给解释器。
所以,它是这样的:
实际上,这有点简单,因为有几种不同类型的事件队列,它们的优先级顺序是最先到达的,但这描述了与您的问题有关的一般过程。
答案 1 :(得分:1)
在检查事件队列之前,没有设定数量的指令要处理。每条消息运行完毕。从Mozilla文档(https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop):
在处理任何其他消息之前,已完全处理每个消息。在推理程序时,这提供了一些不错的属性,包括以下事实:无论何时运行一个函数,都不能抢占它,并且会在其他任何代码运行之前完全运行(并且可以修改该函数操作的数据)。例如,这与C不同,在C中,如果函数在线程中运行,则运行时系统可能会在任何时候将其停止以在另一个线程中运行其他代码。
该模型的缺点是,如果消息完成时间太长,则Web应用程序将无法处理用户的单击或滚动之类的交互。浏览器通过“脚本运行时间太长”对话框缓解了这种情况。遵循的一个好习惯是缩短消息处理,并在可能的情况下将一条消息分解为几条消息。