Wenn Sie lernen möchten wie Perl-Interpreter-Threads zu verwenden, gibt es gute Dokumentation in perlthrtut
(threads tutorial) und the threads
pragma manpage. Es ist definitiv gut genug, um ein paar einfache Skripte zu schreiben.Anwendungsfälle für Ithreads (Interpreter-Threads) in Perl und Gründe dafür, sie zu verwenden oder nicht?
Allerdings habe ich wenig Anleitung im Web auf warum und was Perl sinnvoll nutzen Interpreter gefunden Fäden für. In der Tat wird nicht viel über sie geredet, und wenn Leute über sie sprechen, ist es ziemlich oft, Leute davon abzuhalten, sie zu verwenden.
Diese Fäden, zur Verfügung, wenn perl -V:useithreads
useithreads='define';
und entfesselt durch use threads
ist, sind auch ithreads, und vielleicht mehr in geeigneter Weise genannt, um sie von Fäden sehr unterschiedlich sind, wie durch die Linux- oder Windows-Betriebssysteme oder die Java VM angeboten in dass standardmäßig nichts geteilt wird und stattdessen viele Daten kopiert werden, nicht nur der Thread-Stack, wodurch die Prozessgröße signifikant erhöht wird. (Um den Effekt zu sehen, einige Module in einem Testskript laden, dann Threads in einer Schleife erstellen für Tastendrücke Pause jedes Mal um und Speicher Anstieg des Task-Managers oder top
sehen.)
[...] Bei jedem Start eines Threads werden alle Datenstrukturen in den neuen Thread nach kopiert. Und wenn ich alles sage, meine ich alle. Dies z.B. enthält Paketspeicher, globale Variablen, Lexika im Bereich. Alles!
- Things you need to know before programming Perl ithreads (Perlmonks 2003)
Wenn das Thema Perl ithreads forschen, werden Sie die Menschen sehen Sie von dessen Verwendung sie entmutigend ("extremely bad idea", "fundamentally flawed" oder "never use ithreads for anything").
The Perl thread tutorial highlights that "Perl Threads Are Different", aber es macht nicht viel Mühe zu erklären, wie sie unterschiedlich sind und was das für den Benutzer bedeutet.
Eine nützliche, aber sehr kurze Erklärung dessen, was itreads wirklich sind, ist from the Coro
manpage under the heading WINDOWS PROCESS EMULATION. Der Autor dieses Moduls (Coro - der einzige echte Thread in Perl) rät auch davon ab, Perl-Interpreter-Threads zu verwenden.
Irgendwo habe ich gelesen, dass das Kompilieren von Perl mit aktivierten Threads zu einem wesentlich langsameren Interpreter führt.
Es gibt eine Perlmonks-Seite von 2003 (Things you need to know before programming Perl ithreads), in der der Autor fragt: "Jetzt magst du dich wundern, warum Perl ithreads nicht fork() verwendet hat? Hätte das nicht viel mehr Sinn ergeben?" Dies scheint vom Autor des forks
Pragma geschrieben worden zu sein. Ich bin mir nicht sicher, ob die Informationen auf dieser Seite auch 2012 für neuere Perls gültig sind.
Hier sind einige Richtlinien für die Verwendung von Threads in Perl ich von meinen Lesungen destilliert haben (vielleicht fälschlicherweise so):
- Betrachten non-blocking IO statt Threads, wie mit
HTTP::Async
oderAnyEvent::Socket
, orCoro::Socket
. - Verwenden Sie Perl-Interpreter-Threads on Windows only, not on UNIX because on UNIX, forks are more efficient both for memory and execution speed.
- Erstellen Sie Threads am Anfang des Programms, nicht, wenn Speicherkondition bereits beträchtlich - siehe "ideal way to reduce these costs" in
perlthrtut
. - Minimieren Sie die Kommunikation zwischen Threads because it's slow (alle Antworten auf dieser Seite).
Bis jetzt meine Forschung. Nun, vielen Dank für mehr Licht können Sie sich auf dieses Thema von Perl in Perl werfen. Was sind einige sinnvolle Anwendungsfälle für Perl in Perl? Was ist der Grund dafür, sie zu benutzen oder nicht?
Danke! Dies ist die detaillierteste Gebrauchsanweisung für Perls Threads, die ich bisher gesehen habe. - In meiner Frage habe ich festgestellt, dass das * Wie * der Verwendung von E-Threads behandelt wird, während das * Warum * und * Was für * fehlen. Wenn man mehr darüber nachdenkt, ist das * wie *, das * warum * und das * was für * eng verwandt und tatsächlich ist das * wie * nicht genau genug (für gängige Perl-Benutzer wie mich), um das * warum zu beantworten * und * was für *. - Diese Antwort ist ein Schritt vorwärts. Danke noch einmal. – Lumi
"Sie sind immer noch besser als Pythons Threads." - Kannst du das erklären? Bitte, es ist sehr interessant – nordicdyno
Meistens geht es um die Python GIL in den meisten Implementierungen (überwiegend cpython, aber andere in geringerem Umfang). Im Grunde bedeutet dies, dass OS-Threads auf Python die CPU-Arbeit nicht gleichzeitig ausführen können - was den entscheidenden Punkt komplett zunichte macht. Sie können sie (Python-Threads) verwenden, um die I/O-Operationen etwas paralleler zu gestalten, aber dafür ist es einfacher, ereignisorientierte APIs zu verwenden. –