Gibt es eine Möglichkeit verwalteten Prozesse in Perl haben (das heißt ein Gewinde Ersatz, das tatsächlich funktioniert)?

StackOverflow https://stackoverflow.com/questions/138696

Frage

Ich habe eine multithreded Anwendung in Perl für die ich auf mehr nicht-Thread-sicher-Module angewiesen bin, so habe ich fork()ed Prozesse unter Verwendung von mit kill() Signalen als Message-Passing Interface.

Das Problem ist, dass die Signal-Handler ein bisschen unberechenbar sind (gelinde gesagt) und oft mit Prozessen enden, die in inapropriate Staaten getötet.

Gibt es einen besseren Weg, dies zu tun?

War es hilfreich?

Lösung

Hier finden Sie aktuelle forks.pm , ein „Drop-in-Ersatz für Gewinde Perl mit fork ()“, die für viel sinnvolle Speichernutzung macht (aber nicht verwenden auf Win32). Es ermöglicht Ihnen, „shared“ Variablen zu deklarieren und dann übergibt sie automatisch auf solche Variablen zwischen den Prozessen vorgenommenen Änderungen (ähnlich wie threads.pm Dinge tut).

Andere Tipps

Je nach genau das, was Ihr Programm tun muss, könnte man mit berücksichtigen POE , die Perl ist ein Rahmen für Anwendungen mit Benutzerraum Gewinde Multi-threaded. Es ist komplex, aber elegant und leistungsfähig und können Sie nicht-Thread-sichere Module durch Begrenzung Aktivität auf einen einzelnen Perl-Interpreter-Thread.

vermeiden helfen

Hilfreiche Ressourcen, um loszulegen:

Darüber hinaus gibt es Hunderte von vorgefertigten POE Komponenten Sie können in einer Anwendung zusammen verwenden.

Sie können immer ein Rohr zwischen Elternteil und Kind Nachrichten hin und her zu übergeben.

pipe my $reader, my $writer;
my $pid = fork();
if ( $pid == 0 ) {
    close $reader;
    ...
}
else {
    close $writer;
    my $msg_from_child = <$reader>;
    ....
}

Nicht eine sehr bequeme Art der Programmierung, aber es sollte nicht ‚unberechenbar‘ sein.

Von Perl 5.8 ab sollten Sie am Kemfäden Modul suchen werden. Hier finden Sie aktuelle http://metacpan.org/pod/threads

Wenn Sie Module verwenden, die nicht Thread-sicher sind, können Sie in der Regel, sie laden mit einem erfordern und Import innerhalb des Fadeneintrittspunkt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top