[Rio-pm] Performance

Lindolfo "Lorn" Rodrigues lorn.br em gmail.com
Sexta Fevereiro 20 12:10:38 PST 2009


O Benchmark não mente :) Fernando++

2009/2/20 Fernando Oliveira <fernandocorrea em gmail.com>

> pois é...
>
> perl -MBenchmark=cmpthese -e '
>
> @a = map {"a$_"."b"} 1 .. 150_000;
>
> @b = "a" .. "e";
>
> sub a{
>    for my $a (@a){
>       for my $b (@b){
>          next if $a =~ /^$b/;
>       }
>    }
> }
>
>
> sub b{
>    for my $a (@a){
>       next if $a =~ /^a/;
>       next if $a =~ /^b/;
>       next if $a =~ /^c/;
>       next if $a =~ /^d/;
>       next if $a =~ /^e/;
>    }
> }
>
>
> cmpthese(50, {a => \&a, b => \&b});
> '
>     s/iter     a     b
> a     3.40    --  -98%
> b 6.44e-02 5175%    --
>
>
>
>
> 2009/2/20 Lucas Mateus <lucasmateus.oliveira em gmail.com>
>
>> Brother, pode ate ser que isso traria um custo, mas não justifica esses
>> numeros:
>>
>> EXEMPLO_1: 10.000 paths/17seg
>> EXEMPLO_2: 750.000 paths/22seg
>>
>> DETALHES: SO RH5 64, 8 GB RAM, 2 Proc Quad Xeon
>>
>>
>>
>> On Fri, 20 Feb 2009 15:17:24 -0300, Fernando Oliveira <
>> fernandocorrea em gmail.com> wrote:
>>
>>  Vc está usando um map em contexto void, o map guarda o array de resposta
>>> na
>>> memoria...
>>>
>>> 2009/2/20 Lucas Mateus <lucasmateus.oliveira em gmail.com>
>>>
>>>  Estou em uma situação prática em que tenho um ARRAY com 750.000 itens,
>>>> cada
>>>> item deve se submeter a 60 RegExp, obtendo match faço um next.
>>>>
>>>> Os dois codigos abaixo (o mais simples que consegui representar) fazem a
>>>> mesma coisa, porem o EXEMPLO_1 tem performance extremamente inferior que
>>>> o
>>>> EXEMPLO_2.
>>>>
>>>> Gostaria de saber dos Mongers justificativa para isso. Seria a RegExp
>>>> dinâmica ?
>>>>
>>>>
>>>>
>>>> EXEMPLO_1
>>>> [code]
>>>>
>>>> my @re;    # lista de RegExp 60 itens
>>>> my @paths; # lista de Paths 750.000 itens
>>>>
>>>> foreach my $path (@paths)
>>>> {
>>>>  map
>>>>  {
>>>>     if ($path =~ /^$_$/)
>>>>     {
>>>>         next;
>>>>     }
>>>>  } @re
>>>> }
>>>>
>>>> [/code]
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> EXEMPLO_2
>>>> [code]
>>>> my @paths; # lista de Paths 750.000 itens
>>>>
>>>> foreach my $path (@paths)
>>>> {
>>>>  next if ($path =~ /^regex_1$/);
>>>>  next if ($path =~ /^regex_2$/);
>>>>  next if ($path =~ /^regex_3$/);
>>>>  next if ($path =~ /^regex_4$/);
>>>>  .
>>>>  .
>>>>  .
>>>>  next if ($path =~ /^regex_60$/);
>>>> }
>>>>
>>>> [/code]
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Lucas Mateus
>>>> Núcleo de Páginas Rápidas e SEO
>>>> Fone: 55 11 3065-9978
>>>> MSN: lucasmateus_777 em hotmail.com
>>>> _______________________________________________
>>>> Rio-pm mailing list
>>>> Rio-pm em pm.org
>>>> http://mail.pm.org/mailman/listinfo/rio-pm
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>> --
>> Lucas Mateus
>> iG - Núcleo de Páginas Rápidas e SEO
>>
>> Fone: 55 11 3065-9978
>> MSN: lucasmateus_777 em hotmail.com
>> _______________________________________________
>> Rio-pm mailing list
>> Rio-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/rio-pm
>>
>
>
>
> --
> Just another Perl Hacker,
> Fernando (SmokeMachine)
> http://perl-e.org
>
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>



-- 
--Lindolfo "Lorn" Rodrigues
www.slackwarezine.com.br
http://lornlab.org
http://sao-paulo.pm.org
use Catalyst;
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/rio-pm/attachments/20090220/1cac8f26/attachment.html>


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