[kansaipm] use & fork

SUGITA Toshinori sugita at d-pad.co.jp
Fri Oct 3 01:05:30 CDT 2003


このMLには初の投稿になります。
デジタルパッド 杉田と申します。

もし、このMLにふさわしくない話題であれば、ご指摘下さい。

現在、perl5.8 にて以下のようなアプリケーションを作ろうと思っています。
プラットホームはUnix系です。

1. ユーザー権限でデーモン起動する。
2. 外部のプロセスからデーモンに対して、リクエストを受け付ける。
   pipeまたはunix socketを想定。
3. リクエストに応じてデーモンはサブプロセスをforkし、その中で処理を
   おこない、pipeまたはunix socket経由でレスポンスを返す

具体的には、apacheからcgiまたはfastcgiを通じて、ネットワーク経由の
リクエストを受け付け、リクエストで指定されたスクリプトをデーモンで
実行してレスポンスを返す、というものを作りたいと思っています。

問題になっているのは、forkしたときの use (というよりは require)の
動作です。
レスポンスを早く返すために出来る限りレスポンスごとのコンパイル量を
減らしたいのですが、forkした後に use を実行すると、コンパイル結果は
forkしたプロセスが終了した時点で消えてしまいます。
また、それぞれのサブプロセス中でコンパイルされた、その他のevalの
コンパイル結果も消えてしまいます。

これを何とかしてキャッシングされるようにする方法はないでしょうか?

いくつか考えてみたのですが、どうもしっくり来るものがありません。

1. そもそもforkしてサブプロセスを起動しない。
   → リクエストが集中したときに待たされるリクエストが増える
   → リソース(CPU,IO,Databaseなど)の有効活用ができない

2. サブプロセス中で use(require)が実行されたらメインプロセス側に
   フィードバックして、requireだけ実行させる
   → 次の同じuseは処理されないで済むが、二つのプロセスで別々に
      コンパイルが実行される
   → eval のコンパイル結果を保存できない

3. サブプロセスを終了させないで、使い回しする。
   → サブプロセスの数だけコンパイルが実行されることになる
      そもそもこれなら、わざわざデーモン立ち上げないでも、fastcgiで
      事が足りてしまう。

4. forkではなくthread を使う
   → スレッドセーフでないモジュールが使えない(どのモジュールが
      スレッドセーフなのかすらわからないんですが。。。)

こんなところなのですが、なにかいいアイデアはないでしょうか?

///////////////////////////////
 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