その際に、外部ネットワークからのアクセスはなし、自分のPCでApacheを常駐させて
Perlプログラムを走らせるのみ、(外部サイトにアクセスするLWPモジュール等は使う)で、
最高のCGIスピードを出せる状態の設定例(httpd.conf)を教えてください。
環境は、
Windows XP SP2(Home)
Perl ver 5.8.8
LWP Version: 5.805
です。
http://q.hatena.ne.jp/1176779133
こちらとの関連であれば、Apacheの設定はほとんど影響しませんよ。
外部サイトの応答待ちがほとんどでしょうから、perlプログラムのアルゴリズムで解決するしかないと思います(外部サイトへのアクセス順序とかアクセス間隔とか)。
う~ん。mod_perlを使ったら?と回答したものです。
#大変恐縮ですが、質問ずばりの回答ではないです。
まず、やりたいことを再確認したいのですが、
ということでしょうか?
それとも、
ということでしょうか?
もしくは、
ということでしょうか?
個人的に使用したいということであれば、やりたいことは、いわゆるスパイダーとかスクレイパーというプログラムを動作させたいということなんですかね?
#要するに、各サイトにあるデータをガサッと集めてきて、加工したものを表示したいということ。
その場合は、apacheは全く関係がないので、perlプログラムを単独で走らせた結果を静的なhtmlファイルとして吐き出し、ローカルでブラウザを使って閲覧すれば済むことだと思います。
最初の質問で、良く意味がわからなかったのですが、このCGIなりPerlが重いと感じるのは、相手のサーバのレスポンスをずっと待っているからじゃないでしょうか?
#つまり、マシンのパフォーマンスの問題ではないということです。
これをCGIとしてWebサーバに乗せたいという理由が、最終目標が外部に公開したいということになると話が別で、サーバーからのレスポンスが帰ってくるまでプロセスがずーと待っている状態で、アクセス数が増えると、サーバーからのレスポンス待ちプロセスが増加するので、当然サーバの負荷は大きくなります。
それを防ぐには、スレッドにしてサーバーにリクエストしてからレスポンスが帰ってくるまで、スレッドがスリープするようにしておけば、バンバンサーバーへのリクエストを発行しても、レスポンスが帰ってくるまでスレッドはスリープするので、ほかのプロセスを処理することができます。
特にCGIでmod_perlを使っていない場合には、cgiがコールされる度にperlインタプリタが起動し、スクリプトの解釈を行い、実行するので、非常に負担が大きくなります。
http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl.html
によると、少なくともmod_perlを使うと、
・cgiが呼ばれる度にperlのインタプリタが起動しない。
→少なくとも最初に呼ばれたときのみ起動する。
・スクリプトがコンパイルされて、キャッシュされるのでスクリプトの解釈をするコストが省ける。
というメリットがあるわけですが、スレッド対応になるわけではありません。
Perlでマルチスレッドを使うには、
こんな感じに書き直すのがいいのではないでしょうか?
http://www.hyuki.com/dig/perlthread.html
#質問に対する直接の回答でなくてすみません。
これは個人で使用する目的で開発しているソフトだから外部からのアクセスがない。
が現在おかれている状況です。
マルチスレッド、、、難しそうですね。
質問の文章がたらずにすいませんでした。
はい、そちらとの関連です。
そうですか、ほとんど影響なしですか、、、。
どうしても、止まってしまうんですよね、、、。