Как работает шаблон реактора в Node.js?

Как работает шаблон реактора в Node.js?

Я читаю шаблоны проектирования Node.js. Я застрял в понимании схемы реактора. Я не вижу здесь никакого стека вызовов. Я думал, что стек вызовов был одной из основных частей дизайна Node.js. Может ли кто-нибудь помочь мне понять эту схему? Также отсутствует очередь обратного вызова.

Да, я думаю, что подобная диаграмма кого угодно смутит... если бы вы просто посмотрели на какой-то пример кода, а не пытались интерпретировать сложные диаграммы, которые на самом деле ничего не проясняют, я думаю, какой бы ни был «шаблон реактора», это было бы вам намного понятнее. Я предполагаю, основываясь на названии, что это означает «программирование на основе событий», которое очень естественно писать на Node.js.

Patrick Roberts 30.06.2019 06:06
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
1
4 009
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Все начинается с приложения, приложение делает запросы, а демультиплексор событий собирает эти запросы, формирует очереди, Event Queues. Демультиплексор событий запускается libuv, библиотекой асинхронного ввода-вывода, которая позволяет Node.js выполнять ввод-вывод.

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

Очередь таймеров имеет наивысший приоритет. Здесь функции setTimeout и setInterval ставятся в очередь. Как только события выполняются в этой очереди или время истекло, цикл событий передает эти функции в стек вызовов, на диаграмме он называется обработчиком выполнения.

Как только одна из очередей событий будет выполнена, вместо перехода к следующей очереди цикл событий сначала проверит 2 другие очереди, которые ставят в очередь другие микрозадачи и функции process.nextTick. Затем он перейдет к следующей очереди. эта диаграмма поможет вам визуализировать цикл событий.

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

примечание: упомянутая вами очередь обратного вызова - это очередь событий, а стек вызовов - обработчик выполнения.

"После завершения событий в этой очереди" Как узнать, что событие выполнено? Опрашивает ли цикл информацию из ОС или ОС уведомляет об этом? Кто обрабатывает событие для ОС и когда она решает обработать?
8bitIcon 06.01.2021 04:01
  1. Приложение генерирует новую операцию ввода-вывода, отправляя запрос к демультиплексору событий. Приложение также указывает обработчик, который будет вызываться после завершения операции. Отправка нового запроса в демультиплексор событий является неблокирующим вызовом и немедленно возвращает управление приложению.
  2. Когда набор операций ввода-вывода завершается, демультиплексор событий помещает набор соответствующих событий в очередь событий.
  3. В этот момент цикл событий перебирает элементы события. Очередь.
  4. Для каждого события вызывается соответствующий обработчик.
  5. Обработчик, являющийся частью кода приложения, возвращает управление циклом событий, когда его выполнение завершится (5a). Пока обработчик выполняется, он может запрашивать новые асинхронные операции (5b), вызывая добавление новых элементов в демультиплексор событий (1).
  6. Когда все элементы в очереди событий обработаны, цикл событий снова блокирует демультиплексор событий, который затем запускает другой цикл, когда доступно новое событие.

Кредит для packtpub.com

Другие вопросы по теме