2010-10-28 3 views
6

Я искал, как работают скрученные и node.js фреймворки, и я , пытаясь понять, как операционная система поддерживает операции ввода-вывода с использованием обратных вызовов.Как реализовано программирование на основе событий?

Я понимаю, что это хорошо, потому что нам нужно меньше потоков, потому что нам нет необходимо заблокировать потоки, ожидающие операций ввода-вывода. Но что-то должно вызвать обратный вызов после завершения ввода-вывода.

Как это реализовано операционной системой?

ответ

5

Один подход заключается в ОС прикрепить информацию о тех, кто ждет обратного вызова для соответствующей структуры данных, например, в явном эквиваленте файлового дескриптора, о котором вы ожидаете уведомления о чтении. Когда что-то происходит с этим файловым дескриптором, ОС сканирует официантов, чтобы узнать, нужно ли их уведомлять. Если да, то это так. Вы можете прочитать об одной реализации этого в Lemon's paper introducing FreeBSD's kqueue mechanism. См., В частности, раздел 6 «Реализация», подразделы 3 и 4 «Деятельность по источнику событий» и «Доставка».

3

Решается в ОС с помощью «средств/интерфейсов уведомления о событиях ввода/вывода», например epoll, опроса, kqueue или выберите.

Посмотрите на deft, и особенно на его «io/event loop», чтобы конкретный пример использования «систем уведомлений», упомянутых выше. (java.nio.channels.Selector является Java NiO способ обеспечить абстракции для этого.)

отказ от ответственности: им ловкий коммиттера