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には非対応である。