Was sind die Alternativen zu Perl-Interpreter-Threads?

8

perldoc-Themen sagt:

  

Von der Verwendung von Interpreter-basierten Threads in Perl wird offiziell abgeraten.

Gibt es andere Perl-basierte Threads? Oder sollten wir einfach keine Threads in Perl verwenden?

    
ealeon 05.05.2015, 14:35
quelle

3 Antworten

8

Hängt davon ab, was Sie erreichen möchten. Ich verwende immer noch Threads ausgiebig und es gibt kein großes Problem mit ihnen.

Das größte Problem mit ihnen ist, dass sie nicht leicht sind, und wenn Sie in andere Sprachen eingefädelt haben, könnten Sie davon ausgehen, dass sie das auch sind.

Sie sind eher das Gegenteil - das Erstellen eines Threads ist wie das erneute Starten des Codes, aber mit einigen nützlichen Hooks für IPC. Das bedeutet, dass Sie nicht wirklich ein Task-per-Thread-Programmmodell erstellen möchten, wie Sie vielleicht denken.

Stattdessen würden Sie viel besser von einem Thread::Queue worker-thread-Modell versorgt. Hier ist ein Beispiel dafür: Perl dämonisiert mit Kinddämonen

Sie können jedoch die Verwendung von fork als Alternative in Erwägung ziehen. fork - aufgrund seiner Implementierung unter Unix - ist ein sehr effizienter Systemaufruf und kann sehr effizient sein, um neue Prozesse hervorzubringen. Der Nachteil ist - es ist nicht ganz so freundlich für IPC.

Parallel::ForkManager ist ein Modul, das ich gerne für Multiprocessing forking tun.

Aber in jedem Fall sollten Sie beachten - Multiprozessing ist kein Wundermittel. Es lässt Sie mehr CPUs hemmen wenn Sie die richtige Art von Problem zu lösen haben. Es wird Ihre Festplatten nicht schneller machen:)

    
Sobrique 05.05.2015, 16:01
quelle
6

Diese Warnung ist poppycock. Es sollte entfernt werden.

Beachten Sie, dass das Erstellen neuer Threads teuer sein kann. Verwenden Sie daher ein Modell, das wiederverwendbare Worker-Threads enthält.

    
ikegami 05.05.2015 15:17
quelle
1

Solange ich weiß, gibt es keine zuverlässigen Thread-Implementierungen. Du solltest bei einigen ereignisbasierten Modulen bleiben, wie Coro , AnyEvent , IO :: Async usw.

    
Vadim Pushtaev 05.05.2015 14:38
quelle

Tags und Links