[Rio-pm] Multi threads

Stanislaw Pusep creaktive em gmail.com
Domingo Março 11 18:57:43 PDT 2012


Aureliano, threads, em Perl, são um assunto polêmico :P
Se o aplicativo que você está desenvolvendo for "I/O-bound", recomendo
AnyEvent; já se for "CPU-bound", recomendo fork (no exemplo que
citou, Parallel::ForkManager cai como uma luva).

ABS()



On Sun, Mar 11, 2012 at 22:43, Aureliano Guedes <guedes_1000 em hotmail.com>wrote:

>  Na verdade, eu acho que minha pergunta que foi feita de forma errada.
> Eu queria, por exemplo, dar ping em um servidor ate derruba-lo, contudo eu
> queria para isso enviar digamos, 5 pacotes simultaneos,
> inves de enviar 1 por vez.
>
> Mas eu entendi quanto a usar o laço, talvez eu realmente faça isso.
> Contudo,
> usar
>
> for (my $i =1; $i <= 5; $i++){
> my $thr = threads->create(\&sub1);
> }
>
> não é o mesmo que usar apenas
>
>
> for (my $i =1; $i <= 5; $i++){
> &sub1;
> }
>
> se a função do meu sub1 for apenas enviar pacotes a um servidor???
>
> ------------------------------
> From: bruno.buss em gmail.com
> Date: Sun, 11 Mar 2012 22:29:06 -0300
>
> To: rio-pm em pm.org
> Subject: Re: [Rio-pm] Multi threads
>
> 2012/3/11 Aureliano Guedes <guedes_1000 em hotmail.com>
>
>  Opa, Bruno, valeu a resposta, mas vamos ver se eu entendi
>
>  eu poderia fazer assim:
>
>
>    1.     use <http://perldoc.perl.org/functions/use.html> threads;
>
>    2.
>    3.     for (my $i =1; $i = 5; $i++){
>    4.     my <http://perldoc.perl.org/functions/my.html> $thr = threads->create(\&sub1);
>
>    5.
>    6.     sub sub1 {
>    7.
>    8.     }
>    9. }
>
> Mas assim não ocorreria  execução simultanea, certo? Pois cada execução
> iria ocorrer uma por vez a cada contagem do contador.
>
>
> A resposta para sua pergunta: errado.
> Porém sua explicação está "correta"... a cada iteração do for, será criada
> uma nova thread, então você terá disparado diversas threads até o final do
> for.
>
> Agora, o ponto em ser simultâneo é um pouco mais complicado: depende de
> quantos cores tem seu sistema (se tiver menos cores que threads utilizadas,
> então as threads estarão executando de forma concorrente e não simultânea),
> depende do escalonador de tarefas do seu sistema operacional, dependo do
> que a sua sub1 faz, etc.
>
> Mas acho que a sua dúvida é um pouco mais básica do que isso...
>
> Fazer:
> for (my $i =1; $i <= 5; $i++){
> [alguma coisa]
> }
>
> é essencialmente igual a fazer [alguma coisa] 5 vezes (tirando o fato que
> você pode utilizar o parâmetro do for para fazer alterações):
> [alguma coisa]
> [alguma coisa]
> [alguma coisa]
> [alguma coisa]
> [alguma coisa]
>
> No seu caso,
> for (my $i =1; $i <= 5; $i++){
> my $thr = threads->create(\&sub1);
> }
>
> É igual a fazer:
> my $thr = threads->create(\&sub1);
> my $thr = threads->create(\&sub1);
> my $thr = threads->create(\&sub1);
> my $thr = threads->create(\&sub1);
> my $thr = threads->create(\&sub1);
>
> Que é exatamente o que você queria, não? ;-)
>
> [ ]'s
> --
> Bruno C. Buss
> http://brunobuss.wordpress.com/
> http://www.dcc.ufrj.br/~brunobuss/
>
> _______________________________________________ Rio-pm mailing list
> Rio-pm em pm.org http://mail.pm.org/mailman/listinfo/rio-pm
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20120311/b21eba0d/attachment-0001.html>


Mais detalhes sobre a lista de discussão Rio-pm