[Cascavel-pm] Dúvida sobre multiprocessamento
Silvio Almeida
scvalmei em graaph.arq.br
Sábado Março 5 09:31:06 PST 2005
Alex,
Programar threads pode ser bem simples, veja o exemplo abaixo. O modelo
de threads do 5.8, chamado ithreads, tem por padrão não compartilhar
dados, então é certo que os dois processsadores estarão trabalhando em
paralelo. Por este mesmo motivo, a performance pode não ser tão boa, mas
certamente ainda será melhor que com fork() - é o que eu acho, não fiz a
comparação...
use threads;
my @arquivos = (1..20);
my %thrs; # um hash com referências para as threads
# disparando uma thread para cada arquivo
foreach my $arq (@arquivos) {
$thrs{$arq} = threads->create('sub_system', $arq);
}
# o programa precisa esperar que todas as threds acabem
map { $thrs{$_}->join; } keys %thrs;
sub sub_system {
my $arq = shift;
# faça aqui o que seu script sub_system.pl faria;
# eu estou esperando até 10 segundos e imprimindo
sleep rand(10);
print "arquivo $arq\n";
}
Para usar o módulo 'threads' você precisa do perl-5.8 compilado com
suporte a ithreads; verifique com perl -V se já é o seu caso.
Silvio
Alex Falcao escreveu:
> Salve senhores,
>
>
> Preciso de uma ajuda para fazer um script que gere varias
> threads, uma para cada arquivo, desta forma, ou algo que funcione (rs),
> já que desta forma não rola... hehehe
>
> my @ARQUIVOS = ("file1.txt", "file2.txt", "file3.txt");
>
> foreach (@FILES) {
> # executar arquivo sub_system.pl
> system ("sub_system.pl", $_);
> }
>
> Para cada FILE, gerar um thread.
>
> Muito obrigado pela ajuda
>
> Alex Falcão
>
>
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
Mais detalhes sobre a lista de discussão Cascavel-pm