Das Kompilieren von Perl mit Thread-Unterstützung fügt aufgrund der gesamten Sperrung eine Menge Overhead hinzu, auch wenn Sie keine Threads in Ihrem Programm verwenden. Ich habe etwa 15% Overhead für einen einfachen Benchmark gemessen, indem ich Perl mit Thread-Unterstützung kompiliert habe.
Weil es nicht robust und performant genug ist, um der Standard zu sein.
Außerdem müssen Sie CPAN berücksichtigen. Es sind zu viele Module in C geschrieben, ohne sich um Threads zu kümmern.
Ich sage das mit aller Liebe und Respekt als Ex-Perl6 / Parrot-Entwickler. Perl5 wurde nicht von Grund auf mit Threading (zumindest wenn ich in die Gemeinschaft involviert war) entworfen.
An diesem Punkt glaube ich nicht, dass genug Leute daran interessiert sind, es zu ändern. Die Zukunft würde Perl6 sein, und Parrot hatte sehr früh Fäden. Es ist wahrscheinlich fraglich, Perl 5 an diesem Punkt seines Lebenszyklus zu destabilisieren.
Es ist nicht so, dass Perl in dieser Hinsicht einzigartig ist, Linux war lange derselbe Weg (da gab es eine große Kernel-Sperre, mit der man umgehen musste). Die meisten Projekte beginnen so, aber einige nehmen es weiter als andere, bevor sie es angehen.
Wie @ steffen-ultimisch gesagt hat, ist das ein Leistungsproblem.
Aber, wenn man so will, ist es möglich, Perl einfach mit und ohne Threads zu installieren, so dass Sie die Version besser für ein bestimmtes Skript verwenden können.
Die Perlbastelbeschwörung, sagen wir für Perl 5.22.1, lautet:
%Vor%Perl threading ist kein Threading im üblichen Sinne - es läuft eigentlich ein separater Interpreter für jeden Thread, daher gibt es keinen gemeinsamen Status. Ein Shared-Memory-Modell ist der Hauptgrund für die Verwendung von Threads im Vergleich zu Forking-Prozessen. Daher werden Perl-Threads nur selten verwendet.
Außerdem ist es leicht, Abstürze oder andere unerwartete Verhaltensweisen zu verursachen, wenn Sie Module verwenden, die nicht von mehreren Threads gleichzeitig threadsicher sind.
Siehe Ссылка für mehr.
Von Perl Themen Tutorial:
Grundlegende Thread-Unterstützung
Thread-Unterstützung ist eine Perl-Kompilierzeitoption. Es ist etwas, das ist aktiviert oder deaktiviert, wenn Perl auf Ihrer Website erstellt wird und nicht wann Ihre Programme sind kompiliert. Wenn dein Perl nicht mit Thread kompiliert wurde Unterstützung aktiviert, dann wird jeder Versuch, Threads zu verwenden, fehlschlagen.
Ihre Programme können das Config-Modul verwenden, um zu überprüfen, ob Threads sind aktiviert.