技術をかじる猫

適当に気になった技術や言語、思ったこと考えた事など。

Node.js の概要について勉強してみる

超引用

Node's goal is to provide an easy way to build scalable network programs. In the "hello world" web server example above, many client connections can be handled concurrently. Node tells the operating system (through epoll, kqueue, /dev/poll, or select) that it should be notified when a new connection is made, and then it goes to sleep. If someone new connects, then it executes the callback. Each connection is only a small heap allocation.

This is in ...

Nodeの目標は、スケーラブルなネットワークプログラムを簡単な方法でビルドできるような手段を提供することだ。HelloWorld のWeb鯖サンプルのように、100以上のクライアントが、同時にアクセスできる。
Node は新しいコネクションが確立された際に、それをOSに通知する(Linuxのepollイベントハンドリング機能、BSD で利用可能な kqueue、Sorarisの/dev/pollまたはselect等を使う)ように指示し、Sleep(待機状態)に入る。誰かが新しいコネクションを行うと、コールバックを実行し、それぞれのコネクションに対し、小さなヒープの確保のみで動作する。

と、、、、何かここまで訳したら、凹む事実。

日本語訳あるじゃねーか|||orz

要するに非同期なイベントドリブン型プログラミングで、サーバプログラムを実現するというのが肝のようだ。
サンプルに出てたPythonのTwistedなんかは確かにイベント登録して、プログラムのイベントループを実行させる。
今回はそれもなしに、言語仕様的にイベントドリブンな状況になる。

この説明を読んでて気になるのは、スレッドではなく、それぞれ単品で動くプロセスであることが強調されている。そこを考慮すると、メモリ内共有なんてものを前提としない分、安全なスレッド作成のセオリーをきちんと踏襲できる。代わりに、協調動作とかはどうやるんだか?複数人で同時にひとつの作業を行うサーバとか、、、、(ネトゲ的な)

まぁ、、、勉強してればそのうち分かるんじゃないかと。

で、よく取り上げられる非同期I/Oの考え方。Nodeでは非同期進行で、基本何もブロックしない。ファイルも、SQLも、HTTPも。
概要読んで、ちょこっとサンプル動かしただけじゃ、実感無いケド、例えばDBで特定データが欲しい場合、待つことは出来ないので、中断し、必要に応じて復帰できるようにするってことが必要になるのかなぁ?と思ったり。

これだけ聞くと、コレほどUIのバックエンドに置くSaaSに適した環境ねーなとか思ったり思わなかったり。