«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как работает цикл событий в Node.js?

Как работает цикл событий в Node.js?

Опубликовано 24 августа 2024 г.
Просматривать:291

How event loop work in Node.js?

Цикл событий — это основная концепция Node.js, которая позволяет ему эффективно обрабатывать асинхронные операции. Вот упрощенное объяснение того, как это работает:

1. Однопоточный характер

Node.js работает в одном потоке. Это означает, что он может выполнять только один фрагмент кода за раз. Однако Node.js предназначен для одновременной обработки множества операций без необходимости использования нескольких потоков.

2. Неблокирующий ввод-вывод

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

3. Механизм цикла событий

Цикл событий отвечает за управление выполнением кода и обработку асинхронных событий. Он постоянно проверяет «очередь» задач и решает, какие из них выполнить. Вот пошаговая разбивка:

  • Инициализация: когда приложение Node.js запускается, оно инициализирует и настраивает среду.
  • Фаза выполнения: Node.js синхронно выполняет любой исходный код. Если есть асинхронные задачи (например, чтение файлов или HTTP-запросы), они передаются системным API.
  • Фазы цикла событий: цикл событий состоит из нескольких этапов, и задачи на каждом этапе обрабатываются в определенном порядке:
    • Фаза таймеров: выполняет обратные вызовы, запланированные с помощью setTimeout() и setInterval().
    • Фаза обратных вызовов ввода-вывода: выполняет обратные вызовы для операций ввода-вывода, таких как чтение файлов или сетевые запросы.
    • Простой, фаза подготовки: внутренняя фаза, используемая для системных задач.
    • Фаза опроса: извлекает новые события ввода-вывода, выполняя их обратные вызовы. Если очередь опроса пуста, он проверит, есть ли обратные вызовы в очереди setImmediate().
    • Фаза проверки: выполняет обратные вызовы, запланированные с помощью setImmediate().
    • Фаза обратных вызовов закрытия: обрабатывает события закрытия, например, те, которые создаются функцией socket.on('close').
  • Повторная проверка и выход: если в цикле событий больше нет задач для обработки, он завершится, что позволит программе завершиться. Если есть еще невыполненные задачи, работа продолжится.

4. Очередь обратного вызова

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

5. Очередь микрозадач (следующий тик)

Помимо основной очереди, существует также очередь микрозадач (или очередь следующих тиков), в которой ставятся в очередь обратные вызовы, запланированные с помощью обработчиковprocess.nextTick() или обещаний .then(). Микрозадачи имеют приоритет над обычными обратными вызовами, то есть они выполняются после завершения текущей операции, но до того, как цикл событий перейдет к следующей фазе.

Пример

Вот простой пример, иллюстрирующий работу цикла событий:

const fs = require('fs');

console.log('Start');

fs.readFile('file.txt', (err, data) => {
  if (err) throw err;
  console.log('File read complete');
});

console.log('End');

Выход:

Start
End
File read complete

Объяснение:

  1. console.log('Начать'); и console.log('Конец'); выполняются синхронно.
  2. fs.readFile инициирует асинхронную операцию чтения файла и без ожидания продолжает выполнение следующей строки кода.
  3. После завершения операции чтения файла ее обратный вызов (console.log('File read Complete');) помещается в очередь обратного вызова цикла событий.
  4. Цикл событий обрабатывает обратный вызов после завершения синхронного выполнения кода.

Цикл событий позволяет Node.js эффективно обрабатывать множество операций одновременно, несмотря на то, что он однопоточный, путем делегирования операций системе и асинхронной обработки их результатов.

Цикл событий организует выполнение задач, устанавливая приоритеты в Очереди микрозадач, чтобы обеспечить быстрое выполнение обещаний и связанных с ними операций, прежде чем переходить к задачам в Основной очереди задач (макрос-задача).

Эта динамика позволяет JavaScript обрабатывать сложное асинхронное поведение в однопоточной среде.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/syed_ammar/how-event-loop-work-in-nodejs-4lf4?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3