Ich bin nicht an OS-nahen Programmiertechniken beteiligt, aber wenn es darum geht, in Perl etwas parallel zu machen, ist die Waffe der Wahl fork
und wahrscheinlich einige nützliche Module, die darauf aufbauen. Die doc Seite für fork
sagt:Was sind die Perl-Techniken, um nur einen Teil des Codes unabhängig voneinander zu trennen?
Does a fork(2) system call to create a new process running the same program at the same point.
Als Konsequenz eine große Anwendung, die einen viel Speicher verbraucht und fork
für eine kleine Aufgabe Aufruf bedeutet, dass es zwei große Perl-Prozesse sein wird, und die zweite wird Ressourcen verschwenden nur um eine einfache Arbeit zu erledigen.
Also, die Frage ist: was zu tun ist (oder wie fork
zu verwenden, wenn es die einzige Methode ist), um einen freistehender Teil des Codes zu haben, läuft unabhängig und nur die Ressourcen es braucht raubend?
Nur ein sehr simpel Beispiel:
use strict;
use warnings;
my @big_array = (1 .. 2000000); # at least 80 MB memory
sleep 10; # to have time to inspect easely the memory usage
fork();
sleep 10; # to have time to inspect easely the memory usage
und das Kind Prozess verbraucht 80+ zu MB.
Um klar zu sein: Es ist nicht wichtig ist, zu diesem abgelöst Code oder zu verwenden das Ergebnis irgendwie nur möglich zu sein, zu kommunizieren "hey zu sagen, dass sie mich diese einfache Aufgabe im Hintergrund laufen und lassen Sie mich meine fortsetzen schwere Arbeit in der Zwischenzeit ... und verschwenden Sie nicht meine Ressourcen! "bei einer schweren Perl-Anwendung.
Ein untergeordneter Prozess erbt alle Attribute seiner Eltern. Es gibt keinen wirklichen Weg, das mit Forking zu umgehen, denke ich nicht. – squiguy
Die Verwendung von 'fork' ist nicht zwingend erforderlich. Jede Technik wäre akzeptabel, sogar "System". – ArtM