Node.jsとは
イベント駆動のサーバサイドJavaScript環境です。
本質
Node.jsを紹介する時に真っ先に「サーバサイドJavaScript」と 紹介されている記事が目立ちますが、それは大きな誤解です1。 なぜかというと、順番が異なるからです。
C10K(クライアント1万台)問題
まず重要なのは、クライアントが1万台接続する環境が必要になったことです。 従来はプロセスやスレッドで対応していましたが、 この仕組みではリソースを食いつぶしてしまいます。
イベント駆動
そのために採用されたのがイベント駆動という方式でした。 I/O待ちが起きる可能性があるときにブロックするのではなく、 ハンドラを登録して待つ方法です。
JavaScriptを選ぶのが自然
イベント駆動で書こうとすると、既存の言語だといろいろとめんどくさいです。 普通にファイルを書こうとするだけでアウトです。 一方で、JavaScriptはイベント駆動ネイティブと言ってもいいくらいです。 なので、サーバ側の開発言語としてJavaScriptを選ぶのは自然です。
ただし、これが唯一の解ではなく、 元々はスレッドが使うメモリが多すぎるのが原因なので、 軽量化したスレッドを使う手もあります2