Warum wird Perl normalerweise ohne Thread-Unterstützung installiert?

7

Perlbrew installiert standardmäßig Perl ohne Thread-Unterstützung. Ist das nur eine alte Gewohnheit oder könnte eine Perl-Installation mit Thread-Unterstützung Probleme erzeugen?

    
Matteo 15.05.2014, 06:06
quelle

5 Antworten

12

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.

    
Steffen Ullrich 15.05.2014, 06:57
quelle
4

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.

    
codenheim 15.05.2014 07:51
quelle
2

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%     
gsl 14.01.2016 16:44
quelle
1

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.

    
Andrew Medico 15.05.2014 06:14
quelle
1

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.

    
user966588 15.05.2014 08:05
quelle

Tags und Links