Vigilando Los Tiempos Ociosos

Un vigilante de tipo idle detecta cuando el sistema esta ocioso, esto es: cuando no hay eventos pendientes. Permite dos atributos adicionales min => $seconds y max => $seconds.

pp2@nereida:~/src/perl/Event$ cat -n idlewatcher.pl
 1  #!/usr/bin/perl
 2  use warnings;
 3  use strict;
 4
 5  use IO::File;
 6  use Math::BigFloat qw(:constant);
 7  use constant VALUE => 0.001;
 8  use Event qw{loop unloop};
 9
10  STDIN->blocking(0);
11  STDERR->autoflush(1);
12  print "Press CTRL_D to finish, any other key to monitor the computation\n";
13
14  my $idle = Event->idle(
15    data => VALUE,
16    cb => sub {
17      $_[0]->w->data($_[0]->w->data+VALUE);
18    },
19    repeat => 1
20  );
21
22  my $io = Event->io(
23    fd => \*STDIN,
24    cb => sub {
25      warn "Partial result: ", $idle->data,".\n";
26      my $bytes = sysread(STDIN, $_, 4);
27      unloop if (defined($bytes) and ($bytes == 0));
28    }
29  );
30  loop;
Event proporciona un atributo especial para los objetos watcher con nombre data . Puede ser utilizado por el programador para guardar información en el objeto watcher.

El único argumento que se pasa al manejador o callback es el objeto evento que ha de ser manejado. El método w de dicho objeto permite obtener el vigilante.

Cuando se ejecuta el programa anterior se obtiene una salida similar a esta:

pp2@nereida:~/src/perl/Event$ idlewatcher.pl
Press CTRL_D to finish, any other key to monitor the computation
                            <-- retorno de carro 
Resultado parcial: 0.179.
                            <-- retorno de carro 
Resultado parcial: 0.249.
                            <-- retorno de carro 
Resultado parcial: 0.346.
                            <-- retorno de carro 
Resultado parcial: 0.447.
                            <-- retorno de carro 
Resultado parcial: 0.54.
^D <-- El usuario pulsa CTRL-D en un sistema Unix para terminar

Ejercicio 5.2.1   Ponga la opción min = 0 en el ejemplo anterior. ¿Que observa?

Casiano Rodríguez León
Licencia de Creative Commons
Programación Distribuida y Mejora del Rendimiento
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=44.
2012-06-19