Модуль 3: Цикл событий

Что такое цикл событий?

Базовое определение гласит: «Цикл событий — это секрет асинхронного программирования в JavaScript». Цикл событий находится в среде выполнения JavaScript и помогает в выполнении нашей программы.

Мы знаем, что JavaScript — это синхронный однопоточный язык. У него есть только один стек вызовов для выполнения нашей программы, и как разработчик мы должны убедиться, что не блокируем основной поток.

Как цикл событий помогает в асинхронном программировании?

Стек вызовов выполняет все, что входит в него, но скажем, пользователь нажимает кнопку, и он вызывает функцию, которая выполняет сетевой вызов, и есть setTimeOut(), и он вызывается, а также вызывает какую-то другую функцию xyz()? Теперь это усложняется, какая функция будет выполняться первой? Как будет управляться стек вызовов? Как цикл событий поможет стеку вызовов выполнить все это?

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

Очередь обратного вызова – это очередь, в которую поступают и находятся все функции обратного вызова, когда они хотят быть выполнены, например: setTimeOut(), setInterval(). Он имеет меньший приоритет, чем Очередь микрозадач.

Очередь микрозадач

Это также очередь с более высоким приоритетом, чем очередь обратного вызова. Все функции обратного вызова из обещаний отправляются в очередь микрозадач, когда они хотят быть выполнены, например: fetch(). все поставленные в очередь микрозадачи одна за другой помещаются в стек вызовов и выполняются.

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

Цикл событий в действии

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