Wie wird ereignisgesteuerte Programmierung implementiert?
-
27-09-2019 - |
Frage
Ich war auf der Suche, wie die verdrehten und node.js Frameworks Arbeit, und ich bin versuchen, genau wie das Betriebssystem unterstützt I / O zu verstehen Operationen Rückrufe verwendet wird.
Ich verstehe, es ist gut, weil wir weniger Threads brauchen, weil wir nicht tun Notwendigkeit haben Threads warten auf I / O-Operationen blockiert. Aber etwas einmal hat den Rückruf rufen die E / A abgeschlossen ist.
Wie dies durch das Betriebssystem implementiert ist?
Lösung
Ein Ansatz ist die OS anhängen Informationen über jemandem wartet auf einen Rückruf an der relevanten Datenstruktur zu haben, wie die im Kernel-Äquivalent des Dateideskriptor Sie wartet Lesebenachrichtigung über. Wenn etwas in diesem Dateideskriptors geschieht, scannt das OS die Kellner zu sehen, ob benachrichtigt werden soll. Wenn sie sollten, dann tut es so. Sie können über eine Umsetzung dieses in Lemon Papier Einführung von FreeBSD kqueue
Mechanismus . Siehe insbesondere Abschnitt 6, „Implementierung“, Abs 3 und 4, „Aktivität auf Ereignisquelle“ und „Delivery“.
Andere Tipps
Dies ist in O gelöst durch Verwendung von „E / A-Ereignisbenachrichtigungsmöglichkeiten / Schnittstellen“, zB epoll , Umfrage, kqueue oder wählen.
Hier finden Sie aktuelle flink , und vor allem seine java.nio. channels.Selector ist die Java-nio Weise eine Abstraktion für diese zur Verfügung zu stellen.)
Disclaimer: im a flink Committer