Welche Module sollte ich für Multithreading in Perl betrachten?
Ich möchte etwas ziemlich niedrige Leistung machen; Ich möchte, dass Threads mehrere Worker gleichzeitig ausführen, wobei jeder für unterschiedliche Zeitabschnitte schläft.
Die neuesten Versionen von Perl haben Threading-Unterstützung. Führen Sie perl -V:usethreads
aus, um zu sehen, ob es in Ihrem System verfügbar ist.
perldoc threads
bietet eine ziemlich gute Einführung in die Verwendung.
Es gibt viele Gründe, warum Sie nicht Multithread wollen. Wenn Sie jedoch Multithread verwenden möchten, könnte der folgende Code als hilfreiches Beispiel dienen. Es erstellt eine Reihe von Jobs, legt diese in eine thread-sichere Warteschlange und startet dann einige Threads, die Jobs aus der Warteschlange abrufen und vervollständigen. Jeder Thread zieht fortlaufend Aufträge aus der Warteschlange in einer Schleife, bis keine Aufträge mehr angezeigt werden. Das Programm wartet darauf, dass der gesamte Thread beendet wird, und druckt dann die Gesamtzeit aus, die für die Bearbeitung der Jobs aufgewendet wurde.
%Vor% Wenn die Leistung kein großes Problem ist, wird fork
inging mehrere Prozesse wahrscheinlich viel einfacher als der Umgang mit Threads. Ich verwende häufig Parallel :: ForkManager , was sehr einfach ist, aber sehr gut, was es tut.
Es hört sich so an, als ob Sie kein präemptives Multithreading benötigen; In diesem Fall sehen Sie sich das kooperative Modell POE an. Da Ihr Code nur dann zu anderen Threads führt, wenn Sie sich entscheiden, und Sie nur einen Thread gleichzeitig ausführen, wird die Entwicklung und das Debuggen wesentlich einfacher.
Coro ist ein nettes Modul für kooperatives Multitasking.
99% der Zeit, das ist was Sie brauchen, wenn Sie Threads in Perl wollen.
Wenn Sie möchten, dass Threads Ihren Code beschleunigen, wenn mehrere Kerne verfügbar sind, gehen Sie den falschen Weg. Perl ist 50 mal langsamer als andere Sprachen. Wenn Sie Ihren Code so umschreiben, dass er auf zwei CPUs läuft, läuft er nur 25x langsamer als andere Sprachen ... auf einer CPU. Lieber die Mühe, die langsamen Teile in eine andere Sprache zu portieren.
Aber wenn Sie nicht wollen, dass IO andere "Threads" blockiert, dann ist Coro genau das, was Sie wollen.
Tags und Links multithreading perl