2017-09-29 18 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', ...). 

詳細な世論調査の段階では、彼らはそれがタイマーでスケジュールタイマーを実行しても、ポーリングキュー内のイベントのO/Iを処理することを言います。私の混乱は、タイマーフェーズとそれらのコールバックのためのI/Oコールバックフェーズがあり、ポールフェーズで行われた作業は何かです。それはスレッドがポーリングフェーズでスリープ状態になるかもしれないが、私はそれを正しく取得しないとも言います。
私の質問は、タイマーのため

  1. なぜ投票フェーズで実行されるスクリプトをare-とI/O(s)は、我々はすでにタイマーとI/Oコールバック相を持っている場合?
  2. これは、ポーリングフェーズがタイマーとI/Oコールバックフェーズとタイマーに代わってコールバックを実行し、コールバックフェーズが内部処理専用であるかどうかです。このフェーズでコールバックは実行されませんか?
  3. このループではどこに約束できますか?以前私は約束はコールバックとだけ考えることができ、コールバックのように扱うことができると考えていましたが、thisビデオでは、約束は内部のイベントループに入りますが、詳細には話しません。

私はこの時点で非常に混乱しています。どんな助けもありがとう。

答えて

0

私は自分自身について読んでいました。タイマーが関係している限り、イベントループに関するdocumentationは、例の形でまともな答えを与えます。 setTimeoutタイマーが100ms後にトリガするように設定されているが、(ポーリングフェーズで)I/Oプロセスが進行中で、実行に100ms以上、たとえば150msが必要であるとします。完了すると、ポーリングフェーズはタイマーフェーズに折り返され、予想される100msよりも150ms後にsetTimeoutを遅く実行します。

ポーリングフェーズがタイマーフェーズにどのように関係しているかを答えるのに役立ちます。本質的には、私が理解しているように、ポーリングフェーズは、必要に応じてタイマーフェーズをもう一度実行するように「決定を下す」ことができます。

+0

redditに関するこのディスカッションは、まだ完全に挑戦しているようです。https://www.reddit.com/r/node/comments/75m6cx/libuv_how_is_the_poll_phase_differentiated_from/?st=ja484wrx&sh=4c279c13 –

関連する問題