Skip to content

Threads en Perl

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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/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.


Leave a Reply

Your email address will not be published.