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