[SP-pm] downloader survey
Stanislaw Pusep
creaktive at gmail.com
Thu Oct 20 14:33:24 PDT 2011
Calma, eu não chutaria cachorro morto, até por que devo muito ao LWP :)
Cada teste individual opera em uma lista razoável de URLs (~1500).
Fiz todos os testes aproximadamente dessa maneira:
cmpthese(5 => {
'LWP::UserAgent' => sub {
my $cv = AE::cv;
my $ua = LWP::UserAgent->new;
for my $url (@urls) {
$cv->begin;
fork_call {
$ua->get($url);
} sub {
$cv->end;
};
}
$cv->wait;
},
'LWP::UserAgent (keep_alive/simple_request)' => sub {
my $cv = AE::cv;
my $ua = LWP::UserAgent->new(keep_alive => $parallel);
for my $url (@urls) {
$cv->begin;
fork_call {
$ua->simple_request(HTTP::Request->new(GET => $url));
} sub {
$cv->end;
};
}
$cv->wait;
},
});
Aliás, testei as melhorias sugeridas para o LWP:
s/iter LWP::UserAgent
LWP::UserAgent (keep_alive/simple_request)
LWP::UserAgent 19.3 --
-4%
LWP::UserAgent (keep_alive/simple_request) 18.5 4%
--
O que são 4% perto dos 200_000% de diferença com o wget?
ABS()
2011/10/20 Eden Cardim <edencardim em gmail.com>
> >>>>> "Stanislaw" == Stanislaw Pusep <creaktive em gmail.com> writes:
>
> Stanislaw> OK, aqui vai o spoiler: estou fazendo benchmark (de
> Stanislaw> overhead) de todos os HTTP agents que conheço. E o LWP
> Stanislaw> está *MUITO* feio na fita:
> Stanislaw>
> https://metacpan.org/module/AnyEvent::Net::Curl::Queued#OVERHEAD
>
> Não me surpreende que o LWP seja bem ruim num benchmark vs um módulo
> escrito especificamente pra esse caso de uso, já que ele é um módulo
> projetado para robustez genérica, mas ainda acho que seria mais justo o
> benchmark considerar os casos ótimos no mundo real de todos os módulos
> analisados.
>
> Por exemplo, todos os módulos estão sendo instanciados dentro do
> benchmark, o que na minha opinião desvirtua o teste já que é bem comum
> certos módulos sacrificarem inicialização para obter desempenho
> subsequente. O tempo de inicialização está sendo contabilizado junto com
> a requisição, no mundo real, a otimização que se faria nesse caso teria
> apenas uma instância pra todas as requisições, e essa instância se
> propagaria pros forks evitando o overhead.
>
> Falando especificamente do LWP, usar
> $ua->simple_request(HTTP::Request->new(GET => $url)) deve melhorar
> bastante o desempenho. Observa que eu estou sugerindo que se crie uma
> instância de requisição a cada iteração já que no mundo real, raramente
> vai se fazer download do mesmo recurso, logo, você precisa de uma
> instância nova da requisição, mas não do user agent. Outra coisa, o
> default do LWP é não usar keep-alive, se você ligar o keep-alive, deve
> melhorar bastante também.
>
> --
> Eden Cardim
> Software Engineer
> http://bit.ly/edencardim
> http://twitter.com/#!/edenc
> +55 73 9986-3963
> =begin disclaimer
> Sao Paulo Perl Mongers: http://sao-paulo.pm.org/
> SaoPaulo-pm mailing list: SaoPaulo-pm em pm.org
> L<http://mail.pm.org/mailman/listinfo/saopaulo-pm>
> =end disclaimer
>
-------------- Pr�xima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20111020/f0a64adf/attachment.html>
More information about the SaoPaulo-pm
mailing list