Node.jsはスケーラブルなWebアプリケーションを作成するために設計された非同期イベント駆動型のJavaScript環境です.主にはサーバーを構築することが多い言語です.
Node.jsでサーバーを構築するのはかなり簡単です.わずか数行でサーバーを作成できます.さらにNode.jsのフレームワーク「Express」を使用するとさらに楽にサーバーを構築できます.
Expressを利用したサーバーの構築をコードで確認してみましょう.
const express = require('express');
const app = express();
app.get('/',function(req,res){
res.send('Hello World');
});
app.listen(8080);
このコードを実行するには以下のモジュールをインストールしておきましょう.
npm install --save express
上のコードを見てわかるようにわずか数行でサーバーを実装できてしまします.
Expressは過去の記事でも紹介しています.詳しくはそちらをご覧ください.
シングルプロセスとシングルスレッド
Node.jsはシングルプロセスとシングルスレッドで動作します.ここでのプロセスは実行中のプログラムのことを指し,プロセスの中には1つ以上のスレッドがあります.スレッドは簡単に言うと逐次実行する処理のことを指します.
一見するとシングルプロセス・シングルスレッドでは,複数の処理に対応できないように感じます.代表的なWebサーバーのApache(prefork)のように複数のプロセスやスレッドをリクエスト毎に構成した方が確実に同時に処理を捌けます.
ではなぜ,Node.jsはシングルプロセス・シングルスレッドを採用しているのでしょう.それは大量のリクエスト時のメモリ領域を削減するためです.マルチプロセスではリクエスト毎にプロセスやスレッドを立てます.これはアクセスが増えれば増えるほどメモリ領域を圧迫してしまいます.これをC10K問題といいます.
Node.jsのシングルプロセス(シングルスレッド)を実装するために非同期 I / Oを利用しています.「I / O」とはWebアプリケーション外部との入出力処理のことです.ファイルの読み込みや,データベースとの接続がこれに当たります.
前回の記事でも少し触れましたが,非同期 I / Oは重い処理を後回しにすることで,大量のリクエストをシングルプロセス(シングルスレッド)で処理することができます.