kakts-log

programming について調べたことを整理していきます

node イベントループ枯渇状態

nodeでアプリケーションを作成する際、1つ1つの処理を出来るだけ軽く、簡素にして
数多くのI/Oイベントを素早く処理出来るように設計することが重要である。

イベントループについて考える際、コードの内容によって、1つの処理が完了しないために次のステップに進むことが出来ない場合がある。この時、I/Oイベントを待ち受けたり、検知したり、さらにはコールバックの実行などのステップにたどり着けなくて、うまく動作しばい状態に陥る。
この状態をイベントループ枯渇状態と呼ぶ。
以下のコードは、この枯渇状態が起こってしまう一例である。

var http= require('http');
var server = http.createServer(function(req,res)){
    res.writeHead(300,{'Content-Type' : 'text/plain'});
    res.end('helloworld');
});

server.listen(1400);

while(true); //イベントループを止める処理


このコードはあるリクエストに対して、helloworldの文字列をレスポンスとして返すものである。最後のwhile文が枯渇状態の原因である。


このwhile(true)はずっと実行し続ける。よって、この処理は終了しない。
これにより、前回の記事で説明したprocess.nextTick()で実行された初期スクリプト
完了せず、次のステップに進めない。

nodeでコーディングする際に、こうした枯渇状態に気をつけることが必要です。