最近、Perlにたよりっきりのプログラムを書いています。
しかし、いろいろなコードを書くうちにどうしても、これ以上速度を早くすることが不可能になってきました。
そこで、いろいろと調べたところmod_Perlというものがある事に気がつきました。
以下が自分の環境です。
どなたか、mod_Perlをスムーズにインストールできるサイトの紹介やmod_Perlについての解説をしていただけないでしょうか?
mod_Perlを使用する際の注意点などもいただければ幸いです。
おおめにポイントを差し上げます。
環境:
Windows XP SP2
Perl ver 5.8.8
Apache HTTP Server 2.2.3
http://www.din.or.jp/~bigstone/cgilab/cgitips/mod_perl.html
というページがありました。
コンパイルしてキャッシュする分高速に実行されますが、
その分メモリー消費量が増えるという問題がありますね。
Windowsで使用するための情報に関しては、
http://age.s22.xrea.com/mod_perl/
というページがありました。
ActivePerlを使用しているのであれば、ppmを使ってmod_perl
をインストールすると便利です。
ありがとうございます!
さっそくやってみますね!
わかりやすいです、ありがとうございます!
mod_perl は、主に Perl 起動時の OS の負荷、Perl スクリプトの中間コードへの変換コストを省くためのもので、Perl の処理自体が高速になるわけではありません。
http://ja.wikipedia.org/wiki/インタプリタ
ですので、プログラムの中でブン回しているループが遅いなら、効果はありません。そういう場合は、処理を工夫するしかなく、それにはプロファイラが有効です。
ありがとうございます。
ループの中で10万回ほどの比較をする処理があります。いろいろと試してみたのですが、やはりこれ以上比較の処理は減らせないとして、なんとかしてスピードをあげれないものか、、、と考えていたのです。
回答ありがとうございました。
Perl の高速化を希望されるのであれば、mod_perl の他にも SpeedyCGI や FastCGI といった選択肢もありますよ。
SpeedyCGI - CGIスクリプトを常駐させて実行することによりスピードアップさせます
lighttpd + FastCGI は mod_perl + Apache1.3 より1割ほど高速 :: Drk7jp
Perlの主なアクセラレーターの速度を比較 に示されているように、FastCGI や SpeedyCGI の方が mod_perl より高速です。
利用の手軽さ (いかに既存のコードを修正せずに利用できるか) という点では、SpeedyCGI が最も手軽に利用できます。場合によっては一切修正せずに利用できます。
mod_perl は、Apache のプロセスが激太りしてメモリ消費が非常に増える点 (メモリを大量に消費するという点は FastCGI や SpeedyCGI もそうですが、mod_perl は特に) や、Apache プロセス内部で動くため Perl 側の不具合が Apache 全体に悪影響を及ぼす恐れがある等の面からも、SpeedyCGI や FastCGI をお勧めしたいところです。
ただ、SpeedyCGI は Windows では普通には利用できませんので、coLinux を併用する必要があります。Cygwin でも動くかもしれませんが、未確認です。
FastCGI は Windows でも利用できるようです。(小粋空間: Windows XP 自宅サーバで FastCGI を利用する for Movable Type 3.34)
なお、いずれにしても、コンパイル済みのコードを常駐化することにより起動時のオーバーヘッドを減らすという基本的な仕組みは変わらないので、
ループの中で10万回ほどの比較をする処理があります。
というようなループ部分の高速化は望めません。
根本的にアルゴリズムを見直す (ハッシュを使うことでその部分をループでなくすることはできないか、等)、その部分だけ C で書く、SQL で一括処理できるような内容であれば DBD::SQLite を使う、等の工夫が必要です。
回答ありがとうございます。
いろいろと調べましたが、単純な高速化でなんとかしようというのは、安易だったと思いました。
しかし、データベースは使うことが出来ないため、ソースをもう一度見直してなんとかするしかないな、と考えています。
ありがとうございます!
ありがとうございます!
非常に助かります。