Mas será que depende tanto assim de CPU? ;)<div>Veja essa tabela (aliás, o artigo em si é excelente): <a href="http://norvig.com/21-days.html#answers">http://norvig.com/21-days.html#answers</a></div><div>Daí deduzimos que, desprezando todo o tipo de atrito, enquanto *UM* pacote ICMP está a caminho, uma CPU mequetrefe executará *150 MILHÕES* de instruções. Todavia, o que eu tenho certeza absoluta é que o overhead de gerenciar processos/threads "paralelos" tenderá a ocupar a CPU inteiramente :(</div>

<div>Todavia, não há a menor necessidade de gerenciar processos/threads, ao menos, nesse caso! Muitas pessoas empregam threads apenas para contornar o "blocking" das operações de I/O. Outra forma é simplesmente... desabilitar o "blocking".</div>

<div><br>ABS()<br><br>
<br><br><div class="gmail_quote">On Mon, Mar 12, 2012 at 09:54, Aureliano Guedes <span dir="ltr"><<a href="mailto:guedes_1000@hotmail.com">guedes_1000@hotmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div><div dir="ltr">
Hoje em dia os moldens mais simples pode bloquear ping por defaut, contudo no trecho citado vc falou de 2GHz.<br><br>Testa um i7 e usando GPU com uma placa de video poderosa, levando uma internet de 15MB/s (a minha é so 10MB/p).<br>

<br>Facilitaria bastante, não?<br><br>No meu caso, como sou programador por esporte, e me interesso pela parte de segurança digital, quero aprender intimamente<br>a parte "underground", para isso tenho uma rede configurada onde um Windows 95 esta me esperando pra brincar com ele.<br>

<div><div></div><hr>From: <a href="mailto:creaktive@gmail.com" target="_blank">creaktive@gmail.com</a><br>Date: Mon, 12 Mar 2012 09:42:52 -0300<div><div class="h5"><br>To: <a href="mailto:rio-pm@pm.org" target="_blank">rio-pm@pm.org</a><br>

Subject: Re: [Rio-pm] Multi threads<br><br><div>Da documentação do AnyEvent::FastPing:</div><div><br></div>"Performance: On my 2 GHz Opteron system with a pretty average nvidia gigabit network card I can ping around 60k to 200k addresses per second, depending on routing decisions"<div>



<br></div><div>Tentar isso com threads certamente vai derrubar o host... O SEU :P<br clear="all"><br>ABS()<br><br>
<br><br><div>On Mon, Mar 12, 2012 at 09:01, Vinícius Miasato <span dir="ltr"><<a href="mailto:viniciusmiasato@gmail.com" target="_blank">viniciusmiasato@gmail.com</a>></span> wrote:<br><blockquote style="border-left:1px #ccc solid;padding-left:1ex">



<div>>Ainda dá pra derrubar servidor com ping hoje<br>
> em dia?<br>
<br>
</div>dependendo do servidor, sim, mas creio que são raridades hoje em dia,<br>
<div><br>
>Tem uma coisa que a maioria ignora sobre threads, que é o fato de elas<br>
>serem utilizadas para rodar código em paralelo quando o processador<br>
>está *ocioso*.<br>
<br>
</div>não necessariamente. não se usa threads para rodar código somente pelo<br>
processador estar ocioso. threads geralmente são utilizadas para<br>
executar tarefas distintas pois quando uma thread entrar em um estado<br>
bloqueante, as demais ainda podem entrar em execução, porém isso<br>
também não é regra.<br>
<div><br>
> Fique esperto também com a afinidade. Não necessariamente quatro<br>
> threads rodando em um processador com quatro núcleos vão rodar cada<br>
> uma em um núcleo. Eventualmente, você pode criar N threads que rodem<br>
> em apenas um dos núcleos, e aí você se lascou.<br>
<br>
</div>com uma boa programação e se o SO permitir, você pode escolher em qual<br>
núcleo cada processo executa =D<br>
<br>
abs.<br>
Japa<br>
<br>
Em 12 de março de 2012 00:38, Blabos de Blebe <<a href="mailto:blabos@gmail.com" target="_blank">blabos@gmail.com</a>> escreveu:<br>
<div><div>>> Bem, agora exclareceu mais o assunto na minha cabeça, contudo me deixou com<br>
>> mais medo de usar threads... hahaha.<br>
><br>
> Se você tem medo de usar threads, então você não está pronto pra usar threads.<br>
><br>
>> Bem, esquecendo o assunto de redes, o que eu pretendo fazer é pingar um<br>
>> servidor, contudo inves de usar 4 bot para<br>
>> enviar 4 pings simultaneos eu quero usar uma unica maquina para enviar esses<br>
>> 4 pings. Mas é so uma questão de estudo<br>
>> nada de underground.<br>
><br>
> Estudo, sei...<br>
><br>
> Bem, uma rede bem configurada vai solenemente cagar pro seus pings,<br>
> então vou supor que você está estudando como configurar redes de forma<br>
> a evitar um DoD por ping. Ainda dá pra derrubar servidor com ping hoje<br>
> em dia?<br>
><br>
>> Exemplos que achei na internet não davam muita mobilidade de escolher o<br>
>> numero de threads e tals.<br>
><br>
> Exemplos de threads que você (você, um sujeito genérico, ok)<br>
> normalmente são porcaria. O que você precisa é ler com atenção o livro<br>
> de SO do tio Tanenbaum <a href="http://www.pearsonhighered.com/tanenbaum" target="_blank">http://www.pearsonhighered.com/tanenbaum</a>.<br>
><br>
> ...<br>
><br>
> Tem uma coisa que a maioria ignora sobre threads, que é o fato de elas<br>
> serem utilizadas para rodar código em paralelo quando o processador<br>
> está *ocioso*.<br>
><br>
> Lembre-se sempre que há um custo para o SO fazer a troca de contexto e<br>
> se o seu código for CPU bound, fazer o processador ficar chaveando<br>
> contexto quando ele deveria estar processando, é perda de tempo.<br>
><br>
> Threads são melhores utilizadas para executar tarefas enquanto alguma<br>
> parte do código está esperando I/O. Por exemplo, interface gráfica,<br>
> que fica fica esperando o usuário interagir, ou ainda código que faz<br>
> I/O, como o seu caso.<br>
><br>
> Fique esperto também com a afinidade. Não necessariamente quatro<br>
> threads rodando em um processador com quatro núcleos vão rodar cada<br>
> uma em um núcleo. Eventualmente, você pode criar N threads que rodem<br>
> em apenas um dos núcleos, e aí você se lascou.<br>
><br>
><br>
> []'s<br>
><br>
><br>
><br>
><br>
><br>
> 2012/3/11 Aureliano Guedes <<a href="mailto:guedes_1000@hotmail.com" target="_blank">guedes_1000@hotmail.com</a>>:<br>
>> Bem, agora exclareceu mais o assunto na minha cabeça, contudo me deixou com<br>
>> mais medo de usar threads... hahaha.<br>
>><br>
>> Bem, esquecendo o assunto de redes, o que eu pretendo fazer é pingar um<br>
>> servidor, contudo inves de usar 4 bot para<br>
>> enviar 4 pings simultaneos eu quero usar uma unica maquina para enviar esses<br>
>> 4 pings. Mas é so uma questão de estudo<br>
>> nada de underground.<br>
>><br>
>> Exemplos que achei na internet não davam muita mobilidade de escolher o<br>
>> numero de threads e tals.<br>
>><br>
>> Mas valeu, monges, me ajudou muito mesmo.<br>
>><br>
>>> Date: Sun, 11 Mar 2012 22:58:20 -0300<br>
>>> From: <a href="mailto:viniciusmiasato@gmail.com" target="_blank">viniciusmiasato@gmail.com</a><br>
>><br>
>>> To: <a href="mailto:rio-pm@pm.org" target="_blank">rio-pm@pm.org</a><br>
>>> Subject: Re: [Rio-pm] Multi threads<br>
>>><br>
>>> só para não ficar confuso demais, a variável $pool_thr[ $i ] não<br>
>>> recebe o retorno das threads. ela serve como uma forma de controle das<br>
>>> threads, para efetuar join, detach ou executar outros métodos<br>
>>> fornecidos,<br>
>>><br>
>>> o link para a documentação mais detalhada estpa abaixo:<br>
>>> <a href="http://perldoc.perl.org/threads.html" target="_blank">http://perldoc.perl.org/threads.html</a><br>
>>><br>
>>> abs.<br>
>>> Japa<br>
>>><br>
>>> Em 11 de março de 2012 22:53, Vinícius Miasato<br>
>>> <<a href="mailto:viniciusmiasato@gmail.com" target="_blank">viniciusmiasato@gmail.com</a>> escreveu:<br>
>>> > olá Aureliano,<br>
>>> ><br>
>>> > parece que você está confundindo um pouco o conceito de threads.<br>
>>> > quando uma thread é criada ela executa em paralelo ( assumindo que sua<br>
>>> > máquina possui vários nucleos e seu SO dá suporte à multi-threads ).<br>
>>> ><br>
>>> > o código que você citou espera a rotina terminar antes de iniciar uma<br>
>>> > nova iteração do loop, já com threads, o loop continua mesmo sem a<br>
>>> > thread retornar, caso a tarefa seja grande o suficiente,<br>
>>> ><br>
>>> > o que o Buss falou está certo, então venho tentar adicionar algo à mais,<br>
>>> ><br>
>>> > como você não menciona nada sobre controle de threads, talvez você não<br>
>>> > precise manter o controle das threads ao cria-las, então você pode<br>
>>> > efetuar um detach nelas, o que significa descartar qualquer retorno da<br>
>>> > thread em questão. após um detach, a thread não poderá mais ser<br>
>>> > controlada.<br>
>>> ><br>
>>> > caso queira esperar um thread específica retornar antes de criar as<br>
>>> > outras você  pode efetuar um join para aguardar o término da mesma,<br>
>>> ><br>
>>> > seria algo como:<br>
>>> ><br>
>>> > my $thr =  threads->create(\&sub1);<br>
>>> > $thr->detach; # não queremos saber sobre o retorno desta thread e<br>
>>> > liberamos ela<br>
>>> ><br>
>>> > ou<br>
>>> ><br>
>>> > my $thr2 =  threads->create(\&sub2);<br>
>>> > my $resposta = $thr->join; # o retorno da sub2 atribuído à variável<br>
>>> > escalar $resposta<br>
>>> ><br>
>>> > para o caso de você querer receber o resultado de cada thread criada,<br>
>>> > vale à ideía do Buss de criar um array no loop aonde as threads são<br>
>>> > criadas,<br>
>>> > ficando mais ou menos assim:<br>
>>> ><br>
>>> > my @pool_thr;<br>
>>> > for (my $i =1; $i = 5; $i++){<br>
>>> >    $pool_thr[ $i ] = threads->create(\&sub1);<br>
>>> > }<br>
>>> ><br>
>>> > sub sub1 {<br>
>>> > ....<br>
>>> > }<br>
>>> ><br>
>>> > quanto ao exemplo do servidor, mesmo com threads ou forks, enfim<br>
>>> > vários processos em paralelo, você ainda terá outro provável gargalo,<br>
>>> > que é a parte de rede,<br>
>>> ><br>
>>> > abs.<br>
>>> > Japa<br>
>>> ><br>
>>> > 2012/3/11 Aureliano Guedes <<a href="mailto:guedes_1000@hotmail.com" target="_blank">guedes_1000@hotmail.com</a>>:<br>
>>> >> Na verdade, eu acho que minha pergunta que foi feita de forma errada.<br>
>>> >> Eu queria, por exemplo, dar ping em um servidor ate derruba-lo, contudo<br>
>>> >> eu<br>
>>> >> queria para isso enviar digamos, 5 pacotes simultaneos,<br>
>>> >> inves de enviar 1 por vez.<br>
>>> >><br>
>>> >> Mas eu entendi quanto a usar o laço, talvez eu realmente faça isso.<br>
>>> >> Contudo,<br>
>>> >> usar<br>
>>> >><br>
>>> >> for (my $i =1; $i <= 5; $i++){<br>
>>> >> my $thr = threads->create(\&sub1);<br>
>>> >> }<br>
>>> >><br>
>>> >> não é o mesmo que usar apenas<br>
>>> >><br>
>>> >><br>
>>> >> for (my $i =1; $i <= 5; $i++){<br>
>>> >> &sub1;<br>
>>> >> }<br>
>>> >><br>
>>> >> se a função do meu sub1 for apenas enviar pacotes a um servidor???<br>
>>> >><br>
>>> >> ________________________________<br>
>>> >> From: <a href="mailto:bruno.buss@gmail.com" target="_blank">bruno.buss@gmail.com</a><br>
>>> >> Date: Sun, 11 Mar 2012 22:29:06 -0300<br>
>>> >><br>
>>> >> To: <a href="mailto:rio-pm@pm.org" target="_blank">rio-pm@pm.org</a><br>
>>> >> Subject: Re: [Rio-pm] Multi threads<br>
>>> >><br>
>>> >> 2012/3/11 Aureliano Guedes <<a href="mailto:guedes_1000@hotmail.com" target="_blank">guedes_1000@hotmail.com</a>><br>
>>> >><br>
>>> >> Opa, Bruno, valeu a resposta, mas vamos ver se eu entendi<br>
>>> >><br>
>>> >>  eu poderia fazer assim:<br>
>>> >><br>
>>> >>     use threads;<br>
>>> >><br>
>>> >><br>
>>> >>     for (my $i =1; $i = 5; $i++){<br>
>>> >>     my $thr = threads->create(\&sub1);<br>
>>> >><br>
>>> >><br>
>>> >>     sub sub1 {<br>
>>> >><br>
>>> >>     }<br>
>>> >> }<br>
>>> >><br>
>>> >> Mas assim não ocorreria  execução simultanea, certo? Pois cada execução<br>
>>> >> iria<br>
>>> >> ocorrer uma por vez a cada contagem do contador.<br>
>>> >><br>
>>> >><br>
>>> >> A resposta para sua pergunta: errado.<br>
>>> >> Porém sua explicação está "correta"... a cada iteração do for, será<br>
>>> >> criada<br>
>>> >> uma nova thread, então você terá disparado diversas threads até o final<br>
>>> >> do<br>
>>> >> for.<br>
>>> >><br>
>>> >> Agora, o ponto em ser simultâneo é um pouco mais complicado: depende de<br>
>>> >> quantos cores tem seu sistema (se tiver menos cores que threads<br>
>>> >> utilizadas,<br>
>>> >> então as threads estarão executando de forma concorrente e não<br>
>>> >> simultânea),<br>
>>> >> depende do escalonador de tarefas do seu sistema operacional, dependo<br>
>>> >> do que<br>
>>> >> a sua sub1 faz, etc.<br>
>>> >><br>
>>> >> Mas acho que a sua dúvida é um pouco mais básica do que isso...<br>
>>> >><br>
>>> >> Fazer:<br>
>>> >> for (my $i =1; $i <= 5; $i++){<br>
>>> >> [alguma coisa]<br>
>>> >> }<br>
>>> >><br>
>>> >> é essencialmente igual a fazer [alguma coisa] 5 vezes (tirando o fato<br>
>>> >> que<br>
>>> >> você pode utilizar o parâmetro do for para fazer alterações):<br>
>>> >> [alguma coisa]<br>
>>> >> [alguma coisa]<br>
>>> >> [alguma coisa]<br>
>>> >> [alguma coisa]<br>
>>> >> [alguma coisa]<br>
>>> >><br>
>>> >> No seu caso,<br>
>>> >> for (my $i =1; $i <= 5; $i++){<br>
>>> >> my $thr = threads->create(\&sub1);<br>
>>> >> }<br>
>>> >><br>
>>> >> É igual a fazer:<br>
>>> >> my $thr = threads->create(\&sub1);<br>
>>> >> my $thr = threads->create(\&sub1);<br>
>>> >> my $thr = threads->create(\&sub1);<br>
>>> >> my $thr = threads->create(\&sub1);<br>
>>> >> my $thr = threads->create(\&sub1);<br>
>>> >><br>
>>> >> Que é exatamente o que você queria, não? ;-)<br>
>>> >><br>
>>> >> [ ]'s<br>
>>> >> --<br>
>>> >> Bruno C. Buss<br>
>>> >> <a href="http://brunobuss.wordpress.com/" target="_blank">http://brunobuss.wordpress.com/</a><br>
>>> >> <a href="http://www.dcc.ufrj.br/%7Ebrunobuss/" target="_blank">http://www.dcc.ufrj.br/~brunobuss/</a><br>
>>> >><br>
>>> >> _______________________________________________ Rio-pm mailing list<br>
>>> >> <a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>> >><br>
>>> >> _______________________________________________<br>
>>> >> Rio-pm mailing list<br>
>>> >> <a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
>>> >> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>>> _______________________________________________<br>
>>> Rio-pm mailing list<br>
>>> <a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
>>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
>><br>
>> _______________________________________________<br>
>> Rio-pm mailing list<br>
>> <a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
>> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
> _______________________________________________<br>
> Rio-pm mailing list<br>
> <a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
> <a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br>
</div></div></blockquote></div><br></div>
<br>_______________________________________________
Rio-pm mailing list
<a href="mailto:Rio-pm@pm.org" target="_blank">Rio-pm@pm.org</a>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a></div></div></div>                                           </div></div>
<br>_______________________________________________<br>
Rio-pm mailing list<br>
<a href="mailto:Rio-pm@pm.org">Rio-pm@pm.org</a><br>
<a href="http://mail.pm.org/mailman/listinfo/rio-pm" target="_blank">http://mail.pm.org/mailman/listinfo/rio-pm</a><br></blockquote></div><br></div>