Im Folgenden wird nicht in gleichzeitigen Threads laufen, wie ich erwartet hatte, sondern jeder Prozess blockiert, bis er abgeschlossen ist:Wie gleichzeitige Threads in Perl ausgeführt werden?
my @arr = (1,2,3,4);
foreach (@arr) {
threads->new(\&doSomething, $_)->join;
}
sub doSomething {
my $thread = shift;
print "thread $thread\n";
sleep(5);
}
Mit anderen Worten, es wird die gleiche wie die nicht-Thread-Version zu Ausführung würde:
my @arr = (1,2,3,4);
foreach (@arr) {
doSomething($_);
}
I mswin32-x86-Multi-Thread ActivePerl v5.10.1
Wie ich laufen gleichzeitige Threads in perl ausführe?
Ich habe dies versucht - nur auf einmal spawnen, dann durch die Threads und Beitritt, aber sobald der erste Join aufgerufen wird, blockiert es. es ist fast so, als müsste ich nachgeben, bis jeder Thread fertig ist, dann mach mit, aber ich bin mir nicht ganz sicher, wie das geht. – user210757
Genau. 'Join' ist eine blockierende Operation. Aber Threads, die bereits erzeugt wurden, laufen weiter, während der Hauptprozess auf 'Join' wartet, um zurückzukehren. Wenn Sie in diesem Fall alle Threads spawnen und dann beitreten, würden Sie erwarten, dass der erste Join-Aufruf etwa 5 Sekunden dauert und alle anderen Join-Aufrufe sehr kurz sind. – mob
als Antwort markiert. list(), in Kombination mit is_joinable war was ich brauchte - danke – user210757