よりスレッド間(同一プロセス)に限って変数を共有することもできます。CGIのキャッシュ環境プログラム::mod_perlFastCGI対応は書き間違えだったのですが、どうせならということで対応してみました(対応版の配布はβ4以降になります)。いずれの設定も全くチューニングも何もしていませんので、参考程度にお願いします。http://127.0.0.1/xxx/adiary.cgi/user/テストしたページには適当な日記が数件表示されています。結果は数回実行して頻出値に近い値を取りました。5.084mod_fastcgiとmod_fcgidは差がなくて、mod_perl/mod_speedycgiが一歩前に出てるという感じですね。方がよいのかもしれません。優る選択肢はないのですが個人では必要ないでしょう。モジュールを組み込まないとならないので、お手軽に高速化したい場合はSpeedyCGI(ソースコード)をオススメします。パフォーマンスも(個人で使うには)十分ですし、Apacheからは完全にcgiとして見えるので(プロセスが完全に分離するので)、精神的にもよいです。系では勝負にならないと思います各方式の特徴せっかくなので、簡単に仕組みと特徴を説明。Perl/cgi通常のcgi動作。Perl/cgiでは、cgiファイル(使用ライブラリファイル群)のコンパイル時間がとても長く、度々問題となります。*3以下の方式は、どれもこのコンパイル時間を減らすことで大きな高速化を果たしています。SpeedyCGI(=PersistentPerl)/mod_speedycgiApacheからみたら通常のcgiプログラムですが、スクリプト1行目にPerlではなくSpeedyCGIを起動するための#!/usr/bin/speedyを記述することでSpeedyCGIが動作します*4。SpeedyCGIは内部的にPerlを呼び出し、実行終了後もそのプロセスを常駐させ(バックエンドと言う)、続いてリクエストが来たときに空いたバックエンドがあればそれに処理を行わせます。スクリプト側から見た場合、Apacheプロセスと分離されることを除けば*5、全体的な動作はほとんどmod_perlと同じです。歴史が浅いのか何なのかいまいちマイナーだけど、導入も容易で、mod_perlでは動作しないスクリプトも動作し、Apacheとは別プロセスになるので使うのも気楽です。SpeedyCGIをインストールしてあるレンタルサーバもみかけます。mod_speedycgiはSpeedyCGIの管理プログラム起動コストを押さえるためApacheにモジュールとして組み込んだものです。MPMには非対応なので注意が必要です。FastCGI/mod_fcgidSpeedyCGI的な考え方をより推し進めて、Apache内部にバックエンドプロセスを管理する機能をモジュールとしてインストールしたものです。オーバーヘッドがありません。mod_fastcgi(FastCGI)とmod_fcgidの差ですが、前者をスレッド動作のApacheに組み込むのはあまりよろしくないとのことです。巷の噂によると後者の方が速いとかなんとか。FastCGIをスレッド動作のApacheに組み込んだとしても、CGIプログラム(Perlなど)自体は1プロセス=1クライアントとなります。cgiスクリプトはFastCGI向けに改造する必要があります。++$count);}mod_perlバックエンドどころか、「Perl自体をApacheに抱え込んでしまえばいい」という荒技的な解決策を提示するのが、mod_perl。荒技なだけに、もっともオーバーヘッドが少ない*6方式です。mod_perlの特徴として、Apacheの内部動作をスクリプト側から事細かに制御できますが、移植性(配布性)を考えたソフトではあまり使うことはありません*7。2.0/2.2系向けのmod_perl2があり全く互換性がありません*8。この互換性が度々問題となって、mod_perl1向け書かれたcgiをmod_perl2で動かそうとすると誤動作して厄介な問題を引き起こします。スクリプト側から見た場合、mod_perl1やスレッド動作でないApache2ならば、およそSpeedyCGIと同じような感じです。worker(スレッド)動作でのmod_perl2は、Perlスクリプト自体もスレッド動作することで高い効率が得られる一方、カレントディレクトリを指定出来ない(chdir()できない)こと*10、あらゆるスクリプトがマルチスレッドでライブラリ空間(メモリ空間)を共有すること*11が大きなネックになります。後からこの対応を行うことは困難であり、これがmod_perl2向けスクリプトがほとんど存在しない原因になっていると思われます。されます(いずれか1つ選択)。不必要なライブラリを極力ロードしないように気を付けているadiaryですら、cgi実行時間の約9割がPerlのコンパイル時間です。サーバ全体で1つディレクトリにあるmod_perl2スクリプトしか実行しないとすれば、なんとかなるかも知れませんが......。特定関数内で一時的であってもグローバル変数にデバッグフラグを立てるモードを設定するなどということが出来ない。Type)を動かそうとしたり、古いスクリプトをmod_perl2で動かそうとする人たちがいまして。いうページの中で、mod_perl2はカレントディレクトリをスクリプトのdirに変更しないというのが日本ではなぜか迷信のごとく広まっています。......いやある意味では正しいのですけど。しています(別にやり玉に挙げているわけではなくて、どこのサイトを見てもおよそこんな感じです)。しても途中でカレントディレクトリが変わる可能性がある=あまり意味がないからです。prefork(従来のプロセスをforkして並列動作する方式)で動いてることを期待しています。