generated at
イベントループ
まずはイベントループのアーキテクチャ
Node.jsが起動すると、上記のイベントループの初期化が行われる。
初期化後、実際にイベントループの処理を開始する前に以下のことが行われる。
タイマーのスケジュール設定
process.nextTick() の呼び出し
同期タスクの実行
非同期APIの呼び出し
> イベントループは複数のTaskを同時に処理することはできないため、キューに入れられ順次処理されるようになっています。つまり、1つのTaskが完了する時間が長いと健全ではない(イベントループに遅延が出る)ということになります。

nextTickQueueとmicroTaskQueue
> イベントループの各フェーズのあとに nextTickQueue microTaskQueue に入れられたイベントのキューをチェックし、空になるまで実行します
nextTickQueue
process.nextTick を使用して登録されたコールバックを保持
すべての非同期タスクの中で最速
microTaskQueue
Promise オブジェクトのコールバックはここに。
nextTickQueue が空になり次第、ここが実行される。

フェーズ
Timer
イベントループの開始フェーズ
setTimeout setInterval のコールバックを実行する
タイマーを最小ヒープに保持し、有効期限が切れたタイマーをNodeが確認し、コールバックを実行する
他のコールバックの実行により遅延が発生する可能性があるため、指定された時間のできるだけ近い時間で呼び出される。
Pending callbacks
> This phase executes callbacks for some system operations such as types of TCP errors. For example if a TCP socket receives ECONNREFUSED when attempting to connect, some *nix systems want to wait to report the error. This will be queued to execute in the pending callbacks phase.
> このフェーズでは、TCPエラーのタイプなどのシステム操作のコールバックを実行します。 たとえば、接続を試みるときにTCPソケットがECONNREFUSEDを受信した場合、一部の* nixシステムはエラーの報告を待ちます。 これは、保留中のコールバックフェーズで実行するためにキューに入れられます。
イベントループの pending_queue のコールバックを実行するフェーズ
システム操作系の完了、エラーのI/O操作のコールバックが実行される
Idle, prepare
Poll
Check
Close callbacks


参考