[kansaipm] use & fork
SUGITA Toshinori
sugita at d-pad.co.jp
Sat Oct 4 06:28:45 CDT 2003
杉田です。
いくつかわかったことがあったので、(かつ、このあとは時間がかかりそうなので)
とりあえず、中間報告です。
# From: SUGITA Toshinori <sugita at d-pad.co.jp>
# Subject: Re: [kansaipm] use & fork
# Date: Sat, 04 Oct 2003 19:46:58 +0900 (JST)
> > Simon Cozensさん作成のByteCacheというモジュールがあります。一度バイトコー
> > ドにコンパイルしたものは適当なディレクトリに保存しておき、そしてそこから
> > ローディングするようになっています。
> > これでコンパイルの時間は確かになくなりますが、実行速度とかは環境にもより
> > ますし、Simon Cozensさん自身、このモジュールは実験的なものであり、「Do
> > not use in production systems.」と言ってますが、検討されみてはいかがでしょ
> > うか。
>
> これは、使えるかも知れません。
> 今回のプロジェクトに使用するなら、ファイルに保存しなくてもパイプ中を
> 流してやれば、プロセス間で共用できそうです。
> 問題は、同じソースコードが必ず同じコンパイル結果になるのかどうか
> そこが問題になりそうですね。
>
> 実験してみる価値は十分にありそうです。ありがとうございました。
> また、実験結果が出れば、お知らせしたいと思います。
まず、第1。
ByteChacheモジュールは、内部で perlcc -B しています。
(と言うか、ほとんどそれしかしてません)
で、必然的に第2。
このモジュールでコンパイルされたバイトコードは、
ByteLoaderモジュールを使ってロードされます。
第3。
ByteLoaderモジュールは XSLoaderモジュールを使って
バイトコードをロードします。この時点までは、データは
ファイルに入っています。
このモジュールの中でファイルからデータ(バイトコード)を
読み出して、DynaLoader経由でコードをメモリに格納しているようです。
第4。
perlcc -B は Bモジュールを使ってスクリプトをコンパイルしています。
ということで、現在のところの結論(目論見(^^;)。
1. Bモジュールを使ってevalおよびモジュールをコンパイルして、
バイトコードをサブプロセス側で取得。と同時にDynaLoaderで
コンパイルされたコードをロード。
(もちろん、そのためには、コンパイルしようとするスクリプト中の
use, requireなどをトラップする必要があります)
2. パイプなりsocketなりでメインプロセス側にバイトコードを横流し。
メインプロセス側でもDynaLoaderをつかって、コンパイル済コードを
ロード(モジュールの場合)、または、コードリファレンスとして
キャッシング(evalの場合)。
(バイトコードをコードリファレンスに変換する方法はまだ見つけていません)
3. これで、メインプロセスから次のサブプロセスをforkするときに
サブプロセス側にコンパイル済のものがコピーされて渡される。
と言う方針で、頑張ってみたいと思います。
とりあえず、何とか先が見えた気がします。
(バイトコード→コードリファレンスがどうなるかにかかっている気もしますが)
また、成果があったら報告します。ありがとうございました。
#なにか突っ込みどころがあれば、どんどん突っ込んでください。
#お願いします。
///////////////////////////////
SUGITA Toshinori 杉田 敏典 Digital Pad Inc. .・.
E-MAIL : sugita at d-pad.co.jp ●・
WebPage : http://www.d-pad.co.jp/
メール・スクランブル http://www.d-pad.co.jp/mail/scramble/
アンケートしよう! http://www.d-pad.co.jp/enquete/make/
有名人にメールしよう http://www.d-pad.co.jp/mail/fame/
アクセス解析サービス http://www.d-pad.co.jp/inspect/
More information about the Kansai-pm
mailing list