В чем разница между Event Loop в браузере и через Node.js

Ответ

Event Loop в браузере и Node.js имеют схожую концепцию, но различаются в деталях реализации:

  1. Браузер:

    • Использует один главный поток (UI thread) для рендеринга и выполнения JS.
    • Имеет микротаски (Promises, MutationObserver) и макротаски (setTimeout, события UI).
    • Разные API для работы с асинхронностью: XHR, Fetch, DOM Events.
  2. Node.js:

    • Использует libuv для обработки асинхронных операций.
    • Имеет дополнительные фазы: timers, I/O callbacks, idle/prepare, poll, check, close callbacks.
    • Поддерживает worker threads для параллельного выполнения.

Пример для Node.js:

setTimeout(() => console.log('timer'), 0);
setImmediate(() => console.log('immediate'));
// Порядок вывода не гарантирован!

В браузере микротаски выполняются между макротасками, а в Node.js - в конце каждой фазы Event Loop.

Ответ 18+ 🔞

Да ты посмотри, какая, блядь, разница! Ну вроде Event Loop, и там, и там, а нет, сука, под капотом-то — пиздец!

Смотри, в браузере-то у нас, блядь, один главный поток, как царь и бог. Всё на нём: и твой JS выполняется, и страница рисуется. Представь, один мужик и плитку кладёт, и обои клеит, и холодильник таскает. Сука, герой труда! И асинхронщина там через два основных типа: микротаски (эти, блядь, промисы) и макротаски (таймауты всякие, события). Микротаски — шустрые, блядь, между макротасками выскакивают, как тараканы из щелей.

А вот Node.js — это уже, сука, не один мужик, а целая артель под названием libuv! Там уже фазы, блядь, целые: таймеры, I/O колбэки, poll, check... Ёперный театр, а не цикл! И воркер треды свои есть, чтобы не в одну лошадь запрягаться.

И вот смотри, классический пиздец, который всех новичков в ступор вгоняет:

setTimeout(() => console.log('timer'), 0);
setImmediate(() => console.log('immediate'));
// Порядок вывода не гарантирован!

Вот сидишь и думаешь: «Ну таймер на ноль, immediate... Кто первый?». А нихуя! Порядок, блядь, не гарантирован, как погода в Питере! То один, то другой. Вот где собака, сука, зарыта!

И главное, блядь, запомни: в браузере микротаски между макротасками вклиниваются, а в Node.js они, хитрая жопа, в конце каждой фазы Event Loop'a выполняются. Вот так-то, в рот меня чих-пых! Одна концепция, а нюансов — овердохуища.