Perlbrewは、スレッドのサポートなしでデフォルトの Perl ごとにインストールされます。これは単なる従来の習慣ですか、それともスレッドをサポートする Perl のインストールで問題が発生する可能性がありますか?
5 に答える
デフォルトにするには堅牢性とパフォーマンスが十分でないためです。
それに加えて、CPAN を考慮する必要があります。スレッドを考慮せずに C で書かれたモジュールが多すぎます。
Perl6 / Parrot の元開発者として、愛と敬意を込めてこれを言います。Perl5 は、最初からスレッド化を念頭に置いて設計されたわけではありません (少なくとも私がコミュニティに参加していたときは)。
現時点では、それを変更することを気にする人は十分ではないと思います。将来は Perl6 になる予定で、Parrot には非常に早い段階でスレッドがありました。ライフサイクルのこの時点で Perl 5 を不安定化させることは、おそらく疑問です。
この点で Perl がユニークなわけではありません。Linux は長い間同じ方法でした (対処しなければならない大きなカーネル ロックがあったため)。ほとんどのプロジェクトはそのように開始されますが、一部のプロジェクトは他のプロジェクトよりも先に進んでから取り組みます。
@steffen-ultisch が言ったように、これはパフォーマンスの問題です。
しかし、必要に応じて、スレッドの有無にかかわらず Perl を簡単にインストールできるため、特定のスクリプトにより適したバージョンを使用できます。
たとえば Perl 5.22.1 の場合の perlbrew のインストールは次のとおりです。
perlbrew install-multiple 5.22.1 --both=thread
perl スレッドのチュートリアルから:
スレッドのサポートは、Perl のコンパイル時のオプションです。これは、プログラムをコンパイルするときではなく、サイトで Perl をビルドするときにオンまたはオフにするものです。Perl がスレッド サポートを有効にしてコンパイルされていない場合、スレッドを使用しようとすると失敗します。
プログラムで Config モジュールを使用して、スレッドが有効かどうかを確認できます。
Perl スレッド化は、通常の意味でのスレッド化ではありません。実際にはスレッドごとに個別のインタープリターを実行するため、共有状態はありません。共有メモリ モデルは、プロセスのフォークではなくスレッドを使用する主な理由であるため、Perl スレッドはほとんど使用されません。
さらに、スレッドセーフではないモジュールを複数のスレッドから同時に使用すると、クラッシュやその他の予期しない動作が発生しやすくなります。
詳細については、 http://perldoc.perl.org/threads.htmlを参照してください。