2017-09-29 22 views
2

我正在通过节点docs进行事件循环,并且我非常困惑。 它说 -NodeJS事件循环中的投票阶段

timers: this phase executes callbacks scheduled by setTimeout() and 
setInterval(). 
I/O callbacks: executes almost all callbacks with the exception of close callbacks, the ones scheduled by timers, and setImmediate(). 
idle, prepare: only used internally. 
poll: retrieve new I/O events; node will block here when appropriate. 
check: setImmediate() callbacks are invoked here. 
close callbacks: e.g. socket.on('close', ...). 

然后在详细调查阶段,他们说,它计划执行与计时器计时器也过程I/O在调查队列中的事件。我的困惑是,我们已经有了这些回调的定时器阶段和I/O回调阶段,那么轮询阶段完成的工作是什么。它还表示,线程可能会在调查阶段进入睡眠阶段,但我没有正确理解。
我的问题是 -

  1. 为什么调查阶段执行脚本定时器和I/O(S)时,我们已经有定时器和I/O回调阶段?
  2. 它是否像调查阶段代表计时器执行回调和I/O回调阶段和计时器和回调阶段只是为了内部处理没有回调在这个阶段执行?
  3. 我们可以在这个循环中放置承诺?早些时候,我认为承诺可以简单地理解为回调,我们可以像回调一样对待它们,但在this视频中,他说承诺进入内部事件循环,但不会详细讨论。

我对此很困惑。任何帮助将不胜感激。

回答

0

我只是在读我自己。就定时器而言,关于事件循环的documentation以示例的形式给出了一个体面的答案。假设一个setTimeout定时器被设置为在100ms后触发,但I/O进程正在进行(在轮询阶段),并且需要超过100ms才能执行,比如150ms。一旦完成,轮询阶段将返回到计时器阶段,并在150ms后比预期的100ms执行setTimeout。

希望能够帮助回答轮询阶段如何与计时器阶段相关。实质上,根据我的理解,轮询阶段可以“做出决定”在必要时再次运行计时器阶段。

+0

在reddit上发现了这个讨论,似乎仍然试图充分利用它https://www.reddit.com/r/node/comments/75m6cx/libuv_how_is_the_poll_phase_differentiated_from/?st=ja484wrx&sh=4c279c13 –