2010-06-18 17 views
3

Twisted a une boucle d'événement "non bloquante".Comment fonctionne une boucle d'événement non-bloquante?

Je comprends ce que fait une boucle d'événements de blocage (en quelque sorte, à partir de la page Wikipédia) mais je n'arrive pas à comprendre comment fonctionne une boucle non-bloquante.

+0

Ceci est similaire à une autre question à laquelle j'ai répondu il y a quelque temps: http://stackoverflow.com/questions/80617/asychronous-programming-in-python-twisted/81456#81456 – Glyph

Répondre

3
while (true) 
    wait_for_events 
    handle_events 

Fondamentalement, boucle d'événements non bloquant utilise dispositif qui permet d'attendre plusieurs événements en même temps (select/poll sous UNIX, WaitForMultipleEvents sous Windows, sous Linux epollkqueue sur FreeBSD, etc.). Dans chaque itération de la boucle principale, les événements (descripteurs de fichiers, timers, etc.) sont enregistrés dans un type de handle. Ensuite, une fonction qui attend des événements (par exemple, select) est appelée. Cela retourne généralement tous les événements qui se sont produits lors de l'appel de cette fonction. Enfin, la boucle gère ces événements, généralement en appelant des rappels associés à des événements.

Pour plus de détails, voir implémentation de libevent ou de certaines boucles d'événements de la boîte à outils GUI - GTK + ou Qt.

+0

Juste par curiosité, comment le système traiter avec le 'select()', je veux dire est-il fourchu comme un fil? ou processus? Je n'arrive pas à comprendre comment il peut être non-bloquant s'il n'est pas enfilé ou fourchu en tant que processus ... – chutsu