Задать вопрос
andreyvoroncov
@andreyvoroncov
мечтатель

В чем отличие EventLoop в браузере от EventLoop в Node.js?

На последнем собеседовании засыпался на этом вопросе. Вроде, рассказал про 6 этапов Node.js и что в браузере очередь задач микрозадач выполняется после выполнения каждой макрозадачи, а в Node.js микрозадача будет выполняться между различными этапами цикла событий. А как вы бы ответили на этот вопрос?
И еще пытался найти примеры кода, которые работали бы по разному в браузере и ноде (из-за отличий в EventLoop)
setTimeout(()=>{
    console.log('timer1')
    Promise.resolve().then(function() {
        console.log('promise1')
    })
}, 0)
setTimeout(()=>{
    console.log('timer2')
    Promise.resolve().then(function() {
        console.log('promise2')
    })
}, 0)

но видимо это устаревшая информация, у меня в 16 ноде и в браузере исполняются одинаково timer1=>promise1=>timer2=>promise2
  • Вопрос задан
  • 2916 просмотров
Подписаться 11 Средний 4 комментария
Решения вопроса 1
black1277
@black1277
Вольный стрелок
Вы немного запутались. Начиная с 11-й версии Node.js, разница в поведении приведенного вами кода в браузере и ноде - была устранена. Касаемо 6 этапов или фаз, они происходят внутри движка libuv(libuv - это многоплатформенная библиотека C, которая обеспечивает поддержку асинхронного ввода-вывода на основе циклов событий).
Разница в том, что в Node.js мы можем не дожидаться окончания всех этих фаз, а вклиниться на определенных этапах для исполнения микрозадач (при помощи setImmediate и process.nextTick), а в браузере идет взаимодействие с Web API’s (браузерные или веб API), из которого могут поступать новые события (клики, движения мыши и др.), добавляющие в очередь новые макрозадачи(если установлены обработчики этих событий). Кроме того, в браузере есть рендеринг, который не может быть выполнен пока идет выполнение задачи движком(из этого следует, что необходимо разбивать тяжелые и длительные задачи на части).
Как я не пытался изложить точнее и короче, к моим словам можно придраться буквально к каждой фразе. Поэтому, лучше самому изучить первоисточник и пару статей на русском:
What is the Event Loop?
Объяснение работы EventLoop в JavaScript
Игра по правилам: Event loop Node.js
Как устроены цикл событий и стек вызовов в JavaScript
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы