Event loop в JavaScript 🌀

Это цикл, который непрерывно выбирает задачи из очередей задач (Task queue) и выполняет их, обеспечивая асинхронность и реактивность веб-приложений.

Важные сущности.

🔘 Агент (Agent) Отдельная сущность, управляющая своим циклом событий (event loop), например: окно, worker, worklet. 🔘 Очередь задач (Task queue) Множество задач, связанных с определённым источником задач (task source). Несмотря на название, очередь задач - это именно множество, а не очередь в классическом смысле (не FIFO). 🔘 Очередь микрозадач (Microtask queue) Отдельная очередь микрозадач, выполняемых после каждой задачи. Не является очередью задач (Task queue). 🔘 Задача (Task) Абстракция работы, которую нужно выполнить (например, обработка события, парсинг, callback). Event loop не обязательно соответствует потоку операционной системы: несколько event loops могут работать в одном потоке, а некоторые worker-агенты требуют отдельного потока для гарантии прогресса.

Схема работы цикла событий (Event loop).

1. Выбор очереди задач (Task queue) и задачи для выполнения (из множества задач). 2. Выполнение задачи (Task). 3. После каждой задачи - выполнение всех микрозадач (Microtask checkpoint). 4. В случае window event loop - обработка рендеринга и idle period.

#javascript #eventloop