Perl の use と mod_perl、あと LLDN 感想ちょっと。

それとperlのuseってどういうものなのか解らないんだけど、FastCGIのようなプロセス常駐させている場合、rubyのrequire*2したものがプロセスで共有されてて次回の起動コストはかからないんだけど、それとは違うのかな?

use するとこんないいことがあるんだよ、って書こうとしたら引用もとのコメントに miyagawa さんが書いてた。二つあるけど、どっちかというと大きいのは

mod_perlのスタートアップ時にロードしてforkしたchild間で共有してメモリ消費を減らせる(シングルスレッドなFastCGIなら不要?)

ここですね。

mod_perl だと、リクエスト毎に子プロセスを生成してリクエストに応じてプロセスを生成しそれに応答、あとはそのプロセスを使いまわすわけなんですが、use と require の違いが、子プロセスのメモリサイズに大きく影響してきます。

miyagawa さんも書いてるとおり、use で先に読み込ませておくと親プロセスが子プロセスでも必要になるモジュールをメモリ上にロードしているので、子とその内容を共有できるんですね。

一方の reuiqre だと、実行時タイミングでのロードになるので子プロセスが生成されてから、メモリに読み込まれます。fork してる以上、子でロードしたものを親に伝えるっていうことはできないので、子がたくさんできた場合にそれぞれで同じようなコードをロードしなきゃいけない。

mod_perl はメモリの利用量がかなり高く、子プロセスのメモリサイズが同時にさばけるリクエスト数を左右するのに一番重要な値になるので、それを親と共有して減らせるというのは非常に影響がでかいのであります。

しかし、LLDN の感想とか見てるとやっぱ Ruby マンセーな昨今ですね。Rails かっちょいいし。それに、LLDN では Rubyist な人たちのプレゼンが上手だった。ささださん然り高橋さん然り。どんなにすごい物を作っても、プレゼンする力がなければ世に存在しないのと一緒、なんて良く言いますが、ああいう他言語との比較がなされる場で、優秀なプレゼンテーターが出てくるかどうかってのはその後に結構影響するんじゃないかな。

PerlCatalyst とか XMLJavaScript との絡みとか、色々面白い話はあって、それをうまくプレゼンすればスゲーってな話になるんだろうけど、LLDN ではそんな感じではなかった。なんとなく Perl はオールドな香りから抜けられないのは、そういうのをちゃんとプレゼンできる人がそういう場で抜擢されないからなのかもね。