2010-10-28 9 views
6

Ich habe untersucht, wie die verdrehten und node.js Frameworks arbeiten und ich bin versuchen, genau zu verstehen, wie das Betriebssystem I/O Operationen mit Rückrufen unterstützt.Wie wird die ereignisgesteuerte Programmierung implementiert?

Ich verstehe, dass es gut ist, weil wir weniger Threads brauchen, weil wir nicht blockierte Threads haben müssen, die auf E/A-Operationen warten. Aber etwas muss den Rückruf aufrufen, sobald die E/A abgeschlossen ist.

Wie wird dies vom Betriebssystem implementiert?

Antwort

5

Ein Ansatz ist die OS anhängen Informationen über jemanden zu haben, für einen Rückruf an die jeweilige Datenstruktur warten, wie das Kernel-Äquivalent des Datei-Deskriptors, auf den Sie warten, um eine Benachrichtigung darüber zu erhalten. Wenn etwas mit diesem Dateideskriptor passiert, scannt das BS die Kellner, um zu sehen, ob irgendwelche benachrichtigt werden sollten. Wenn sie sollten, dann tut es das auch. Sie können über eine Implementierung davon in Lemon's paper introducing FreeBSD's kqueue mechanism lesen. Siehe insbesondere Abschnitt 6, "Implementierung", Unterabschnitte 3 und 4, "Aktivität bei Ereignisquelle" und "Lieferung".

3

Dies wird in OS mithilfe von "E/A-Ereignisbenachrichtigungsfunktionen/Schnittstellen" gelöst, z. B. epoll, Abfrage, kqueue oder auswählen.

Werfen Sie einen Blick auf , und vor allem seine 'io/event loop für ein konkretes Beispiel, wie die oben genannten "Benachrichtigungssysteme" verwendet werden. (java.nio.channels.Selector die Java-nio Art und Weise ist eine Abstraktion für diese zur Verfügung zu stellen.)

Haftungsausschluss: im ein geschicktes Committer

Verwandte Themen