2010-10-28 23 views
6

Je regardais comment fonctionnaient les frameworks twisted et node.js et je suis essayant de comprendre exactement comment le système d'exploitation supporte les opérations d'E/S utilisant les rappels. Je comprends que c'est bon parce que nous avons besoin de moins de threads parce que nous n'avons pas besoin d'avoir des threads bloqués en attente d'opérations d'E/S (). Mais quelque chose doit appeler le rappel une fois que l'E/S est terminée.Comment la programmation événementielle est-elle implémentée?

Comment cela est-il implémenté par le système d'exploitation?

Répondre

5

Une approche est d'avoir le système d'exploitation joindre des informations sur toute personne en attente d'un rappel à la structure de données pertinentes, comme l'équivalent in-kernel du descripteur de fichier que vous attendez pour lire la notification. Quand quelque chose arrive à ce descripteur de fichier, le système d'exploitation analyse les serveurs pour voir si n'importe qui devrait être notifié. Si elles le devraient, alors il le fait. Vous pouvez lire à propos d'une implémentation de ceci dans Lemon's paper introducing FreeBSD's kqueue mechanism. Voir en particulier la section 6, «Mise en œuvre», les sous-sections 3 et 4, «Activité sur la source de l'événement» et «Livraison».

3

Ceci est résolu dans le système d'exploitation en utilisant "les installations/interfaces de notification d'événements d'E/S", par exemple epoll, poll, kqueue ou sélectionnez.

Jetez un oeil à deft, et en particulier à ses 'io/event loop pour un exemple concret comment les "systèmes de notification" mentionnés ci-dessus sont utilisés. (java.nio.channels.Selector est la façon dont nio java pour fournir une abstraction pour cela.)

Avertissement: im committer adroite