[Rio-pm] Multi threads

Aureliano Guedes guedes_1000 em hotmail.com
Domingo Março 11 18:43:07 PDT 2012


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:

    use threads;

     for (my $i =1; $i = 5; $i++){
    my $thr = threads->create(\&sub1);


    sub sub1 {           }}
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 		 	   		  
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20120312/dee36fcb/attachment.html>


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