まず、プロセスはプログラム実行時に固有のメモリ空間を持ち、独立性の高い実行単位である為、起動やプロセス切替の時間を必要とします。これに対して、スレッドはメモリ空間を複数のスレッドで共有する為、起動やスレッド切替の時間がそれ程、大きくありません。
先程、preforkはマルチプロセス型、workerはマルチスレッド&マルチプロセスと紹介しましたが、これらを図で表すと次のようになります。
(久しぶりにvisioで描いてみました)
ちなみにmpm=workerの場合も、1プロセスあたりのスレッド数は固定されており、リクエスト数に応じてプロセス数を増減させます
私の場合、安定性のprefork
http://httpd.apache.org/docs/2.0/ja/mpm.html
httpd.apache.orgのドキュメントによれば、preforkとworkerの選択基準を次のように記載しています。
また、リバースプロキシを使用して、APサーバにはperfork、静的file(js,css,img etc.)にはworkerに振り分ける構成もあるようです。
ただし、preforkと比較してworkerのパフォーマンスやスケーラビリティが極端に優れているとは思えない為(正確に測定したことはありません)、apサーバも静的fileもpreforkを利用しています。
mpmを指定したapacheのinstall
linuxのディストリビューションによっては、preforkとworkerの2種類のapacheがinstallされているようですが(※)、mpmを変更するには、再コンパイルする必要があります。
※ http://www.turbolinux.co.jp/support/document/knowledge/627.html
install済のmpmの確認方法
mpmはmoduleとしてinstallされる為、install済のmpmは ./httpd -l で確かめることができます。


