Node.jsの非同期イベントを実現するためには,イベントループとイベントキューが必要不可欠です.この2つを簡単に説明すると,イベントループとは複数のイベントを待機させるための仕組みのことを指します.イベントキューとはイベントが発生した場合,そのイベントを待ち行列として格納しておくデータ構造です.これらを使用してノンブロッキングI/Oを効率よく実行させます.詳しくみていきましょう.
イベントキュー
Node.jsではI/Oリクエスト等のイベントは即座に実行されるわけではありません.即座に実行される場合それは同期処理になります.Node.jsでは効率よく非同期処理を実行するために,一度イベントキューに入ります.
イベントキューには「libuv」が提供するキューと「Node」が提供するキューの2つがあります.
libuvが提供するキュー
- Expiredtimers / intervalsqueue
- IO Events Queue
- Immediates Queue
- Close Handlers Queue
Nodeが提供するキュー
- nextTick Queue
- microTask Queue
イベントキューにイベントを追加するイメージは下記の図になります.

libuv
libuvは,もともとNode.js用に作成されたクロスプラットフォームサポートライブラリですが,今ではさまざまなところで使用されています.イベント駆動型非同期I / Oモデルを中心に設計されています.
下記の図は,libuvを構成するパーツと,その関連するサブシステムを示す図になります.

libuvは下記のサイトに詳しい解説がのています.本記事ではキューの種類と簡単な解説のみ紹介します.
libuv 1.38.2-dev documentation
http://docs.libuv.org/en/v1.x/design.html