Hola maestros
Me podrías ayudar, con el uso de los
threads y el consumo excesivo de memoria y de procesador .
Mi intención es la de ejecutar
threads de forma paralela hasta un máximo $ThreadsMAX en (Windows).
El problema es que dependiendo de los valores de @URLs y de $ThreadsMAX se me dispara el consumo de memoria de forma descontrolada.
¿Dónde puedo leer acerca del uso de los
threads o explicarme el porqué de lo que sucede?
Using perl Syntax Highlighting
use POSIX qw[ _exit ];
use Time::HiRes qw[ usleep ];
use threads ( stack_size => 4096 );
use threads::shared;
$|++;
use HTTP::Request;
use LWP::UserAgent;
my $started : shared = 0;
my $ended : shared = 0;
my @URLs = (); #Lista de Urls
my $ThreadsMAX = 50;
BUCLE: while (1) {
if ( ( $started - $ended ) < $ThreadsMAX ) {
if ( @URLs >= 1 ) {
my $URL = shift(@URLs);
threads->create( 'execute_request', $URL )->detach;
}
else {
last BUCLE;
}
}
}
_exit(0);
sub execute_request {
my $URL = shift(@_);
{ lock $started; ++$started; }
print ">> $started - $ended >> " . ( $started - $ended ) . "\n";
my $request = HTTP::Request->new( 'GET', $URL );
my $agent = LWP::UserAgent->new();
$agent->agent('Mozilla/5.0');
$agent->timeout(15);
my $response = $agent->request($request);
if ( $response->is_success ) {
}
else {
}
{ lock $ended; ++$ended; }
}