Middle
53
questionbank

Расскажи о цикле событий (event loop).

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Цикл событий — основа асинхронной работы JavaScript. Он управляет выполнением кода, обработкой событий и взаимодействием с внешним миром.

Основные компоненты:

  • Куча (Heap): Область памяти для выделения объектов.
  • Стек (Stack): Место, где хранятся контексты выполнения функций. При вызове функция помещается в стек, при завершении — удаляется.
  • Web APIS: Интерфейсы, предоставляемые браузером (DOM, AJAX, Timers и т.д.). Они обрабатывают асинхронные операции.
  • Очередь колбэков (Callback Queue): Очередь сообщений, связанных с событиями. Web APIs помещают колбэки завершенных асинхронных операций сюда.
  • Цикл событий (Event Loop): Постоянно мониторит стек и очередь колбэков. Если стек пуст, он берет первый колбэк из очереди и помещает его в стек для выполнения.

Процесс:

  1. Синхронный код выполняется в стеке.
  2. Асинхронные операции (например, setTimeout, fetch) передаются в Web APIs.
  3. Когда асинхронная операция завершена, ее колбэк помещается в очередь колбэков.
  4. Цикл событий ждет, пока стек станет пустым.
  5. Когда стек пуст, цикл событий берет первый колбэк из очереди и помещает его в стек, где он выполняется.

Пример с setTimeout:

javascript

Вывод будет:

plaintext

Несмотря на таймаут в 0 мс, колбэк setTimeout выполняется после синхронного кода, потому что он попадает в очередь и ждет опустошения стека.

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