El siguiente no parece funcionar en hilos concurrentes como esperaba, sino que cada bloques de proceso hasta que es completa:¿Cómo ejecutar hilos concurrentes en perl?
my @arr = (1,2,3,4);
foreach (@arr) {
threads->new(\&doSomething, $_)->join;
}
sub doSomething {
my $thread = shift;
print "thread $thread\n";
sleep(5);
}
En otras palabras, parece ser la ejecución de la misma que la versión no roscada haría:
my @arr = (1,2,3,4);
foreach (@arr) {
doSomething($_);
}
estoy corriendo ActivePerl v5.10.1 mswin32-x86-multi-hilo
Cómo corro hilos concurrentes en perl?
He intentado esto - simplemente generando de inmediato, luego iterando a través de los hilos y uniéndolos, pero tan pronto como se llama a la primera unión, bloquea. es casi como si tuviera que ceder hasta que cada hilo esté completo, luego unirse, pero no estoy muy seguro de cómo hacerlo – user210757
Exactamente. 'join' es una operación de bloqueo. Pero los hilos que ya se han generado continuarán ejecutándose mientras el proceso principal está esperando que 'join 'regrese. En este caso, si genera todos los hilos y luego se une, esperaría que la primera llamada de unión tardara aproximadamente 5 segundos, y todas las demás llamadas de unión serían muy cortas. – mob
marcado como respuesta. list(), en combinación con is_joinable era lo que necesitaba - gracias – user210757