process.nextTickを理解し……たかった
process.nextTickが大事、ってのは前から知ってて、ニコニコ超会議の時もmesoさんが補足するくらいだったので、とっても大事なんだろうなあと思い直したものの、それでもわからないままで(というかろくに調べてなかったし)、わからないままモヤモヤしててもなあ、と思ってちょっと調べてみたのです。
環境:MacOS 10.6.8 / nodebrew 0.5.0 / node.js 0.6.12
process.nextTickで調べると、Understanding process.nextTick() - How To Node - NodeJSが一番上に出てくるので見たことのある人も多いかと。
簡単な英語ではないので読めませんが。
コードだけ読んだ感じだと、process.nextTickで処理を中断?することで複数の処理を一つのプロセスでうまく処理する、という感じに捉えたのだけど。あってるのかな。
あと、nodejs_jpのメーリングリストにsignalの処理について。というものがあったので、真似て実装してみました。
最初にSIGUSR1を受け取ってくれない版のコード。
process.on('SIGUSR1', function () { console.log('SIGUSR1'); process.exit(); }); console.log(process.pid); while (true) {}
次にSIGUSR1を受け取ってくれ、終了するコード。
process.on('SIGUSR1', function () { console.log('SIGUSR1'); process.exit(); }); console.log(process.pid); function nop() { process.nextTick(nop); } nop();
それぞれのコードに
$ kill -s 'SIGUSR1' {pid}
をやってみると、やっぱり最初のコードは無視してそのまま動いていて(whileループしてるんだから当たり前なんだけど)、次のコードはちゃんと'SIGUSR1'って表示して終了する。
うまくprocess.nextTickで処理を分けてあげないと一つのことをずーっと処理しちゃって、他の処理やってくれないよ、って感じでしょうか。
こんな理解でいいのかな……?
追記:
id:koichikさんからClusterとSocket.IO についてを教えてもらった!
帰ってからゆっくり読んでみよーっと。