[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