[kansaipm] use & fork

SUGITA Toshinori sugita at d-pad.co.jp
Sat Oct 4 01:26:41 CDT 2003


# From: 999 at leto.eonet.ne.jp
# Subject: Re: [kansaipm] use & fork 
# Date: Fri, 03 Oct 2003 23:03:09 +0900

> はじめまして。かたやまです。

杉田です。お返事ありがとうございます。

> 僕は5.8系は使ったことないので、お役に立てるかわかりませんが...。
> 的外れな答え又は、間違った意見ならごめんなさい。
> (指摘して頂ければ幸いです。)

いえいえ、どんな意見でも、何かしらヒントがつかめればと思いますので
大歓迎です。

> >レスポンスを早く返すために出来る限りレスポンスごとのコンパイル量を
> >減らしたいのですが、...
> CPU効率はforkしたほうが良いと思いますが、
> fork(プロセス生成)すること自体に負荷が掛かると思うので、
> スレッド化する必要があるかどうかということでしょうね。
> あとはevalの使用を最小限にすることで良いと思います。

やはり、スレッドよりは、プロセスの方が効率はいいのですね。
このあたりは、まともにいじったことがないので、よくわかってませんでした。

> > forkした後に use を実行すると、...
> そもそも
> use Module;
>  とは、
> BEGIN { require "Module.pm"; import Module }
> と同じことなので、
> use文はプログラム(親プロセス)の最初の辺に書いておく。

今回の想定では、どのモジュールをロードしなければならないのか
起動時(コンパイル時)にはわからなので、この手法が使えません。

> >コンパイル結果はforkしたプロセスが終了した時点で消えてしまいます。
> `fork`したプロセス(子プロセス)は、
> 親プロセス(コンパイルされたCGI)をコピーしたものですから
> 問題ないのでは。

nakajimaさんへの返信でも書きましたが、どのモジュールをロードしなければ
いけないのかが、実際にリクエストが来るまでわからないことがネックに
なっています。

> >また、それぞれのサブプロセス中でコンパイルされた、その他のevalの
> >コンパイル結果も消えてしまいます。
> evalを使うと(それぞれ実行時にコンパイルされるので)仕方ないと思います。
> evalを使わずになんとかする方法を考えます。

んー、やはり、evalされた結果(より具体的にはコードリファレントでしょうか)
をプロセス間で共有することは不可能なのでしょうか。。。
evalを使わないとなると、やはり、モジュールにしておくくらいしか
すべてのコードはモジュールとしてあらかじめコンパイルされるように
しておくべきなのかもしれません。。。

> ?:
>  mod_perlでforkすると、どうなんだろ?
>  キャッシュするのかな?

mod_perlって、そもそもfork出来るんでしょうか。
systemとか 逆クォート、execは使えませんよね。
何か、それと同じ理由で使えなくしてありそうですが。。。

///////////////////////////////
 SUGITA Toshinori 杉田 敏典      Digital Pad Inc.    .・.         
   E-MAIL  : sugita at d-pad.co.jp                       ●・
   WebPage : http://www.d-pad.co.jp/
   メール・スクランブル http://www.d-pad.co.jp/mail/scramble/
   アンケートしよう!   http://www.d-pad.co.jp/enquete/make/
   有名人にメールしよう http://www.d-pad.co.jp/mail/fame/
   アクセス解析サービス http://www.d-pad.co.jp/inspect/



More information about the Kansai-pm mailing list