September 22, 2023

Событийный цикл (eventloop)

Событийный цикл обеспечивает параллельное выполнение кода в реальном времени, т. е. совместное выполнение синхронных событий JavaScript и обработку асинхронных задач браузера.

Без событийного цикла выполнение синхронного кода блокировалось бы до момента выполнения асинхронного.

Как работает событийный цикл?

JavaScript читает сверху вниз документ с кодом и отправляет объявленные функции в стэк вызова.

Callstack (стэк вызова)

Стэк вызова запоминает какие функции были вызваны, запоминает их порядок, выделяет под них память (в heap), затем отправляет их на выполнение в JavaScript интерпретатор.

Особенности:

  • Функции попадают в стэк по принципу первый вошел, первый вышел (first come, first served).
  • Стэк имеет ограничение на количество вызовов и зависит от объема памяти, используемого функциями.

После выполнения JavaScript-функции возвращаются стэком вызова тому кто их вызывал, а браузерные отправляются для выполнения в Web API

Браузерные задачи:

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

Event queue (очередь задач)

Очередь задач организует поток выполненных событий Web API.

Очередь состоит из 2-ух других под-очередей:

  • Очередь микро-тасок
    • Имеют высокий приоритет
    • Выполняются группой
  • Очередь макро-тасок (циклы, onClick, postMessage)
    • Выполняются по одному
    • Чередуются с микро-тасками
Событийный цикл бразуера

Далее событийный цикл берет выполненные браузерные функции из очередь задачи и отправляет их в стэк вызова.

Более детальное представление событийного цикла браузера

Дополнительно:

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

Какие отличия в Node?

  • Вместо очередей потоки
  • Нет renderque
  • Дополнительные типы очередей
    • На чтение с БД
    • На запись на диск
    • Обработка http запросов

Вопросы

Видимость eventloop?

  • окно
  • фрейм
  • воркер

Полезное: