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 についてを教えてもらった!
帰ってからゆっくり読んでみよーっと。