#!/usr/bin/perl -w
use strict;
use POE; # Auto-includes POE::Kernel and POE::Session.
sub handler_start {
my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];
print "Session ", $session->ID, " has started.\n";
$heap->{count} = 0;
$kernel->yield('increment');
}
sub handler_increment {
my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION];
print "Session ", $session->ID, " counted to ", ++$heap->{count}, ".\n";
$kernel->yield('increment') if $heap->{count} < 10;
}
sub handler_stop {
print "Session ", $_[SESSION]->ID, " has stopped.\n";
}
for (1..10) {
POE::Session->create(
inline_states => {
_start => \&handler_start,
increment => \&handler_increment,
_stop => \&handler_stop,
}
);
}
POE::Kernel->run();
exit;
POE
es un framework en Perl para programación multitarea y de redes
cooperativa y orientada a eventos. Otros lenguajes tienen frameworks
similares, como Python tiene Twisted y TCL tiene "the event
loop".
POE
provee una interface unificada para varios bucles de eventos,
incluyendo select(), IO::Poll, Glib, Gtk, Tk, Wx, y Gtk2.
POE
logra un alto grado de portabilidad gracias a ser enteramente escrito
en Perl. Pero hay módulos opcionales en XS si la velocidad es más
deseable que la portabilidad.
POE
está diseñado en capas. Cada capa se construye sobre las demás.
Los scripts son libres de usar POE en cualquier nivel de abstracción
y los diferentes niveles pueden mezclarse. Sin embargo las
abstracciones de alto nivel requieren más recursos que las de bajo
nivel.
No hay comentarios:
Publicar un comentario