[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