Threads en Perl

Thursday, April 29th, 2010

Threads es una función que tiene muchos años pero no lo había implementado nunca. Ahora que estoy desarrollando un demonio en Perl utilizando POE y es muy útil y sobre todo fácil de implementar, un ejemplo:

#!/usr/bin/perl

use threads;
use threads::shared;
use LWP::UserAgent;
use Data::Dumper;

my $params = { url => 'http://www.guero.net' };

my $_R = threads->create(sub {
        my $params = shift;
        my $ua = LWP::UserAgent->new();
        my $response = $ua->get( $params->{url} );
        if ($response->is_success) {
                return $response->decoded_content();
        }
}, $params)->join();
print Dumper($_R);

Hay muchas formas de utilizarlo, como siempre el Perl para todo hay mil maneras. El ejemplo este no tiene mucho sentido ya que para un simple get no hace falta mayor cosa pero si se tuviera que hacer algo que consuma mucho CPU es muy útil.

En el caso que estoy ahora (un servidor TCP) tenía el problema que al ejecutar tareas que requieren mucho CPU el servidor deja de responder mientras realiza la tarea ya que solo utiliza una CPU y va al 100%. Lanzando estas tareas con “threads” el servidor sigue respondiendo con normalidad mientras otro hilo está realizando la costosa tarea.

Tags: ,

Leave a comment

Calendar

    April 2010
    M T W T F S S
    « Mar   May »
     1234
    567891011
    12131415161718
    19202122232425
    2627282930