Apache2系のお話。なんか今更な気もするのですが。
なんでも、複数のrequestの処理をするのに、マルチプロセッシングモジュール(MPM)とかっていうモジュールを使っているみたいで。
昔々は「fork(2)だよねぇ」だったのですが、もうちょっとバリエーションがあるみたいです。びっくり。
概ね…
prefork.c
Apache1.3とほぼ同様、スレッドを使わずにforkでじゃかすかバージョン。
「スレッドセーフでないライブラリとの互換性をとるために、 スレッドを避ける必要のあるサイトでは、このモジュールの使用が適切でしょう。 あるリクエストで発生した問題が他のリクエストに影響しないように、 個々のリクエストを単離するのにも、最適な MPM です。」 by http://137.113.100.11/manual/ja/mod/prefork.html というのを読むと「なるほどなぁ」とか思わなくもない。確かにCGIで「threadをちゃんと意識した組み方」してるのってせいぜいJavaな方々ぐらいだと思ふ。
worker.c
一発forkしたら、ThreadsPerChild で設定された分だけはthreadにして、パンパンになったらまたforkして。ううむ確かに「ハイブリッド」 by http://137.113.100.11/manual/ja/mod/worker.html (笑
mpm_winnt.c
Windows NT 向けに最適化されたMPMなんだそうで。まぁつかわんなぁ(爆
って感じ。IfModuleでチェックされてたりするのでまぁ見てみそって感じでしょうか。
httpd -l
でチェックできるんでふが、特に設定してなければ普通は prefork.c になるらしいです by UNIX系。
インテリジェントになったものだなぁ。設定がより一層面倒になった気もするけど。