PersistentPerl

PersistentPerlとは、Perlを高速化する手法の一つである。主にPerlで書かれたCGIを高速化するために使われているがCGI以外のシェル等からでも利用できる。

 概要 

Perlスクリプトは、ユーザーからリクエストがある度に
Perlプロセスの生成
Perlスクリプトの文法解釈
スクリプトのコンパイル
コンパイルされたバイトコードの実行
プロセスの破棄
が行われる。大量のリクエストがあればその分だけ繰りかえされ、この事がパフォーマンスの悪化に繋がっている。

PersistentPerlはPerlスクリプトの実行を
リクエストの受付
（リクエストを受けられるバックエンドプロセスがいなければ）バックエンドプロセスの生成
UNIXドメインソケットを使ったバックエンドプロセスとのデータ受け渡し
を行うフロントエンドプロセスと（つまりフロントエンドプロセスはPerlに関わらない）
初回のみPerlスクリプトをコンパイルし、バイトコードを保持したままプロセスとして残る
フロントエンドからのリクエストに従ってコンパイル済みバイトコードを実行
を行うバックエンドプロセスの2つに分けることで2回目以降のスクリプトの文法解釈とコンパイルにかかる時間をカットし結果としてプログラム起動速度の向上およびサーバ負荷の低下が可能となる。

 利用方法 

CGIとして実行するならばスクリプト冒頭の
 #!/usr/bin/perl
などと書かれている部分を
 #!/usr/bin/perperl
とするだけで既存のコードはほぼそのまま高速化に寄与できる。

Apacheならmod_persistentperlというモジュールがあり、リクエストの度に行われるフロントエンドプロセスの生成に伴うコストを無くすことが可能である。
ただしmod_persistentperlはworker MPMには非対応である。

 関連項目 

 CGI
 Perl

 外部リンク 

 PersistentPerl - Speed up perl scripts by running them persistently.
 SourceForge.net: PersistentPerl
 Apache2.2にmod_SpeedyCGIを組み込むためのパッチの当て方

PersistentPerl
PersistentPerl