В браузере основным движком Event Loop является движок JavaScript (например, V8). Обработка задач происходит в главном, единственном потоке. Задачи делятся на макротаски (DOM события, таймеры, I/O) и микротаски (Promise, MutationObserver). Цикл Event Loop сначала выполняет все доступные микротаски после каждой макротаски.
На сервере (Node.js) Event Loop реализован библиотекой libuv. Он многопоточный и использует пул потоков для выполнения блокирующих операций ввода/вывода (файловые операции, сетевые запросы к другим хостам). Event Loop в Node.js также имеет фазы (таймеры, ожидающие колбэки, poll, check, close callbacks), которые обрабатываются в определенном порядке. Микротаски обрабатываются после каждой фазы.
Ключевые отличия:
| Аспект | Браузер | Node.js |
|---|---|---|
| Движок Event Loop | Часть движка JavaScript | libuv |
| Обработка I/O | Браузерные API (Web APIs) через главный поток | Пул потоков из libuv |
| Фазы Event Loop | Макро- и микротаски | Таймеры, Poll, Check, Close, etc. |
| Источники I/O | DOM, Сеть, Файлы (редко) | Файлы, Сеть |