【Node.js】イベントループの仕組み
概要
Nodeのイベントループは文字通りwhieで行われている ループ処理はI/Oイベントの処理(リクエスト)の実行時やI/Oイベントの発生を待つオブジェクト(ハンドル)の登録時に維持される
例えば下記のコードはハンドルやリクエストが何も登録されていないので、イベントループは維持されずにNodeのプロセスはすぐに終わる
var http = require('http'); var server = http.createServer(function () {});
しかし、server.listen()を加えると、ハンドルの登録が行われてイベントループは維持される。 登録されたハンドルはAPIで削除することもできる。
var http = require('http'); var server = http.createServer(function () {}); server.listen(1337, function() { // ハンドルの登録 setTimeout(function(){ console.log("1秒たったので終了します"); server.close(); // 1秒経つとプロセスが終了する }, 1000); });
Nodeのイベントループで特に重要なのは以下の5ステップ
- setTimeout()のコールバック実行
process.nextTick()のコールバック実行(メインモジュールの実行)
- ユーザから見るとプログラム上のイベントループの起点はここ
I/Oイベントの発生
- 一旦イベントループが停止してOSがI/Oイベントを待ち受ける
I/Oイベントのコールバック実行
- このステップが主なJSの実行ステップ
process.nextTick()コールバックの実行
参考
サーバサイドJavaScript Node.js入門 (アスキー書籍)
- 作者: 清水俊博,大津繁樹,小林秀和,佐々木庸平,篠崎祐輔,高木敦也,西山雄也,Jxck
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/02/27
- メディア: Kindle版
- この商品を含むブログを見る