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; }
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4