El módulo Event
proporciona un bucle de planificación.
El modelo se basa en
- La existencia de eventos. Los eventos tienen tipos específicos: señales, entrada/salida, relojes, variables
que cambian, etc. Incluso hay un tipo de evento idle que reconoce cuando el programa esta ocioso.
También hay eventos que estan formados por grupos de eventos
- Objetos que vigilan esos eventos (watchers). Los objetos watcher tienen un tipo asociado con
el tipo de evento que vigilan.
- Cada evento tiene un manejador (handler o callback), código que dice que hacer
cuando ocurre el evento
- El bucle de planificación
- Cuando se reconoce la presencia de un evento, el vigilante (watcher) produce
un nuevo objeto del tipo adecuado (por ejemplo,
Event:Event::Io
) y lo
almacena en una cola.
- Este objeto representa una petición y contiene información sobre
el evento detectado, sobre el manejador que hay que llamar y sobre el watcher que lo detectó.
- De este modo el vigilante termina con su parte del manejo de este evento y esta en condiciones
de seguir vigilando.
- El objeto
Event:Event::Io
generado permanece en la cola hasta que es procesado por
el bucle de manejadores. El bucle llama entonces a la función de
manejo referenciada por el objeto.
- Después que la petición ha sido satisfecha el bucle destruye el objeto petición
Obsérvese que puede suceder que en determinado instante haya en la cola diversos
objetos petición que hayan sido generados por el mismo vigilante.
Los vigilantes tienen un método pending que provee la lista de sus peticiones
pendientes
@pending_orders = $watcher->pending;
print $watcher->desc,": ",scalar(@pending_orders)," tasks\n";
Subsecciones
Casiano Rodríguez León
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