Página 1 de 1

threads y la memoria

NotaPublicado: 2011-08-31 15:51 @702
por Dgrande
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?



Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use POSIX qw[ _exit ];
  2. use Time::HiRes qw[ usleep ];
  3. use threads ( stack_size => 4096 );
  4. use threads::shared;
  5.  
  6. $|++;
  7.  
  8. use HTTP::Request;
  9. use LWP::UserAgent;
  10.  
  11. my $started : shared = 0;
  12. my $ended : shared   = 0;
  13.  
  14. my @URLs       = ();                   #Lista de Urls
  15. my $ThreadsMAX = 50;
  16. BUCLE: while (1) {
  17.     if ( ( $started - $ended ) < $ThreadsMAX ) {
  18.         if ( @URLs >= 1 ) {
  19.             my $URL = shift(@URLs);
  20.             threads->create( 'execute_request', $URL )->detach;
  21.         }
  22.         else {
  23.             last BUCLE;
  24.         }
  25.     }
  26. }
  27.  
  28. _exit(0);
  29.  
  30. sub execute_request {
  31.     my $URL = shift(@_);
  32.  
  33.     { lock $started; ++$started; }
  34.     print ">> $started - $ended >> " . ( $started - $ended ) . "\n";
  35.     my $request = HTTP::Request->new( 'GET', $URL );
  36.     my $agent = LWP::UserAgent->new();
  37.     $agent->agent('Mozilla/5.0');
  38.     $agent->timeout(15);
  39.     my $response = $agent->request($request);
  40.     if ( $response->is_success ) {
  41.     }
  42.     else {
  43.     }
  44.     { lock $ended; ++$ended; }
  45. }
  46.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Re: threads y la memoria

NotaPublicado: 2011-08-31 16:51 @744
por explorer
¿Qué versión de Perl tienes?

En Perl 5.14.1 se ha multiplicado por 100 la velocidad de reserva de memoria de algunos tipos de procesos.

Re: threads y la memoria

NotaPublicado: 2011-08-31 17:04 @752
por Dgrande
¡¡¡Ta-chan!!! "This is perl, v5.10.1 built for MSWin32-x86-multi-thread "

Probaré de actualizar a ver si por ahí van los tiros, y comento si hay cambios...

Igualmente... ¿cómo veis el código?

Gracias.

diego