Возможно, кто-то, кто реализовал модуль node.js, может объяснить протокол между очередью node.js, обработанной в одном потоке, и блокировкой операций ввода-вывода, которые будут выполняться модулем.
Я подозреваю, что он выглядит примерно так:
- node.js thread регистрирует обратный вызов в форме замыкания и сохраняет его с некоторым идентификатором корреляции.
- node.js вызывает метод (который должен выполнять блокировку IO) в модуле и передает ему параметры метода и идентификатор корреляции.
- метод модуля отталкивает поток и блокирует операцию ввода-вывода.
- Когда выполняется операция ввода-вывода, потоки модулей обращаются к потоку node.js и передают ему результаты и идентификатор корреляции.
- node.js-поток находит сохраненное замыкание обратного вызова по идентификатору корреляции и вызывает его с результатом, возвращаемым из модуля.
Вопрос 1: Правильно ли указан порядок выше?
Вопрос 2: Что такое node.js queue? Это часть, в которой используется порт завершения epoll, kqueue или IO на окнах? Является ли механизмом обратного вызова для модуля уведомлять поток node.js, который закончил какой-то IO? Как это работает?