[kansaipm] use & fork

Dan Kogai dankogai at dan.co.jp
Sat Oct 4 06:34:10 CDT 2003


On Saturday, Oct 4, 2003, at 19:42 Asia/Tokyo, SUGITA Toshinori wrote:
> で、更に発生した疑問なんですが、mod_perlはapache上のモジュールとして
> 動作するわけですが、プロセス的には、どのような構成になるのでしょうか?

Apacheそのものと同一のprocessです。mod_perlとは、すなわちperlを内蔵したapacheなので。ですから、親process 
でuseされたmoduleは、そのまま子processでも使えることになります。その意味で、fastcgiよりさらにefficientです。

> これだと、apacheプロセスごとにmod_perlが使用する
> プロセスがあることになるので、コンパイルがプロセス数分
> 行われることになります。これは私の望む動作ではありません。

というのは誤解で、基本的に子processは親processの環境を、useされたmoduleまで含めて全て継承するので、新たなcompile 
は発生しません。

> やはり、複数プロセスでコンパイル結果をshareする(せめてshareして
> いるように見せかける)のは無理なのでしょうか。。。

というのは mod_perl  
では当たり前にやっていることで、Apache::Registryは通常のCGIに対してもそれを可能にする仕組み 
で、Apache::PerlRunはさらに広範囲のCGIに対して(効率を犠牲にして)それを可能にする仕組みだと考えればよいでしょう。

> evalの結果をshere出来ないことを諦めれば、threadsが一番
> 希望するものに近いものができそうですが、こちらでは逆に
> スレッド自身に伴う問題(共有メモリ、スレッドセーフ云々)が
> 恐いので。。。

Perlのthreadはまだそういう意味で実績が少なく、またmod_perlとの相性もあまりよくありません。あえてthreadを使うというので 
あれば、Apache 2にmod_perl  
2を仕込んでやるというのがthreadを使う回答の中では最良だと思いますが、こう申し上げるのも何ですが、threadうんぬん言う前に、もう少し  
*nix の process の仕組みを勉強した方がいいと思います。

あと、「遅い」とか「効率が悪い」というのは、以外と思い込みの部分が大きなものです、きちんと Benchmark  
した上で結論を出しましょう。そのための Tool もPerlにはたくさんあります。

Dan the Man with Too Many Web Applications to Tune




More information about the Kansai-pm mailing list