ithread 配下で Scalars leaked

Amazon Search のスレッド実行時に Perl のメモリーリークエラーが発生していたので、いろいろ調査。詳細な原因は特定できていないのですが、例えば perl 5.8.x の ithread においてはスレッド内で eval を使用すると、Scalars leaked が発生するようです。例えば、次のコードを linux な環境で実行して見て下さい。

perl -Mthreads -e 'eval q{threads->new(sub{})->join}'

結果は、「 Scalars leaked: 1 」と出力されると思います。何がダメなんでしょうね・・・。このバグとはちょっと関係ないですが、thread::shared で変数を共有する際に何十メガもの巨大なデータを共有するとパフォーマンスが信じられない程に低下しますね。どこがパフォーマンス低下の原因か特定が困難でハマリました・・・。
- スポンサーリンク -