• Publicidad

threads y la memoria

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

threads y la memoria

Notapor Dgrande » 2011-08-31 15:51 @702

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
Última edición por Dgrande el 2011-08-31 17:26 @768, editado 1 vez en total
Dgrande
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2010-02-03 04:59 @249

Publicidad

Re: threads y la memoria

Notapor explorer » 2011-08-31 16:51 @744

¿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.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: threads y la memoria

Notapor Dgrande » 2011-08-31 17:04 @752

¡¡¡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
Dgrande
Perlero nuevo
Perlero nuevo
 
Mensajes: 14
Registrado: 2010-02-03 04:59 @249


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados