主に、オープンソースカンファレンス2014 Tokyo/Spring
Apacheコミッターが見た Apache vs nginx
http://openstandia.jp/pdf/140228_osc_seminar_ssof8.pdf
より
webサーバ仕組み – ざっくり
apache – マルチプロセス、マルチスレッドアーキテクチャ-
マルチプロセス、スレッドの場合、1つのプロセスまたはスレッドがこれを処理する。そのため、1アクセスを処理している間は他のアクセスを処理できず、同時接続数分だけプロセスまたはスレッドが必要となる
マルチプロセス、マルチスレッドの違い
マルチプロセスはメモリ空間を個別に持つが、マルチスレッドはメモリ空間を共有する
メモリの使用効率が高く、プロセス切り替え時にメモリ空間の切り替えが発生しないためコストが低くなる
マルチプロセスの場合、メモリ空間が独立しているため、スクリプト言語などを組みやすい
ただし独立しているため、プロセス間の状況共有が難しく、その分リソースを消費する
マルチスレッドの場合、メモリ空間が各スレッドで共有できる
リソースの消費が少なく、コンテキストスイッチのオーバーヘッドが小さい
ただし、メモリ空間の共有によりスクリプト言語を組み込めないことがある
linuxではスレッドの生成に約1Mメモリが必要
C10K問題
コンテキストスイッチのオーバーヘッドが大きくなり、
nginx -イベント駆動アーキテクチャ-
イベント駆動の場合は処理を分割して考え、イベント駆動マシンが管理する
※3つにわけて考えているが、実際はあらゆる時間のかかる処理を分割して動作している
※apacheのEventMPMはクライアントとネットワークI/O部分のみイベント駆動しているらしい
apacheとは違い、1つのプロセスで複数アクセスを処理することが可能、つまり同時接続数が増えてもプロセス数やスレッド数は増えない
そのため、メモリ消費量やコンテキストスイッチのオーバーヘッドが小さいが、ソースコードは複雑になりやすいとのこと
またapacheと比較して後発であるため、動画ストリーミングやapacheの標準にははいっていないSPDY対応がされている
参考
オープンソースカンファレンス2014 Tokyo/Spring
Apacheコミッターが見た Apache vs nginx