Event loop в Node.js
Вставка
- Опубліковано 29 вер 2024
- Сергей Аванесян, Senior Software Engineer EPAM
«Хочешь понимать, что у NodeJS под капотом? Тогда этот доклад для тебя!
Я расскажу про то, как устроен и работает eventloop в NodeJS. Во время доклада разберем всё на практическом примере с визуализацией».
Ссылка для скачивания презентации: events.epam.co...
Спасибо, крутой доклад. Единственное что, лучше бы слайд постоянно показывали на полный экран, а аудиторию где-то в углу. На аудиторию не очень интересно смотреть, а слайд не видно.
Как решение - скачать презентацию по ссылке и открыть в окне рядом, если есть такая возможность
Отличный доклад
У nextTick() приоритет над таймерами и они выполняются быстрее, но, авторы многих популярных книг по ноде вообще не рекомендуют использовать данный метод
Автору не помешало бы приводить побольше реальных примеров, а так, спасибо за доклад
Я попробовал воспроизвести этот пример но получил результат иной. Поправьте пожалуйста если я не прав:
//------------------------------------------------------------------------------
const fs = require('fs')
console.log('START')
setTimeout(() => {
console.log('setTimeout 1')
}, 0)
setImmediate(() => {
console.log('setImmediate')
})
fs.readFile(__filename, ()=> {
setTimeout(() => {
console.log('readFile setTimeout')
}, 0)
setImmediate(() => {
console.log('readFile setImmediate')
})
process.nextTick(() => {
console.log('readFile nextTick')
})
})
Promise.resolve().then(() => {
console.log('Promise')
process.nextTick(() => {
console.log('Promise Next Tick')
})
})
process.nextTick(() => {
console.log('Next Tick')
})
setTimeout(() => {
console.log('setTimeout 2')
})
console.log('END')
//------------------------------------------------------------------------------
Вывод
START
END
Next Tick
Promise
Promise Next Tick
setImmediate
Странно, что не упомянули автора в тексте.
Сергей Аванесян, запомните этого парня!
Мы исправились =)
Спасибо за доклад, лучшее что видел про event loop ноды
В новых версиях ноды setIntermidiate() имеет выше приоритет и колбэк будет выполнен уже в нынешнем цикле
За пол часа, понять как строить архитектуру кода. Очень информационный доклад без воды!
С файлом немного не точный пример - он туда не заходит потому что файл может быть еще не прочитан и сообщение вообще не в мессейдж кью
Классное видео, но к сожалению допущена ужасная и очень важная для понимания ошибка в описании: микротаски выполняются не после каждой макрофазы, а после каждой задачи из макрофазы. Аналогия такая же как в браузерном ивентлупе, только тут 6 макроочередей вместо 1
Это зависит от версии ноды. Вплоть до v10 включительно обе очереди микротасок обрабатывались между фазами, и только начиная с v11 микротаски обрабатываются также и между обработкой коллбеков.
Тоже долго думал над этим. Спасибо за комментарий!
Лучшее объяснение по этой теме. Посмотрел видосов 10 как на русском, так и на английском, читал документацию, лазил по разным сайтам, но именно благодаря вашему объяснению понял как это работает.
Спасибо большое, очень классный и нужный доклад. Пересмотрела и перечитала кучу всего, этот самый понятный.
Alena Linkevich как успехи, уже выучили?
почему readfile идет в poll ? это же i/o колбэк
Thank you Sergey jan, this is a really very helpful, detailed presentation.
Лучшая подача про event loop
Ахуенно! Спасибо за доклад!
Thanks, Great work!
Как я понял DataLoader основан на том что nextTick выполняется перед Promise
Крутой доклад, большое спасибо!
почему при использовании module вместо require другой порядок
Super!
Супер офигенное обьяснение
стоило начинать с паттерна реактор и демультиплексирования событий, только потом говорить про event loop и уточнить, что по факту нет такого количества очередей под каждую фазу, есть только Event Queue, которую libuv разбирает в соответсвии в фазами
Попробуйте обернуть всё в асинхронную функцию и добавьте await к промисам или докинуть fs/promises
Можешь сделать то же видео в английском переводе?
Это Мартиросян?
no English version please ?
Отличное видео, спасибо!
топ доклад, лектор красавчик, оч понравилось
Коротко и просто очереди и приоритет их выполнения.
Приложите листинг кода плиз
Очень круто! Спасибо!
Сразу зарезолвленный промис это синхронная операция?
Нет, он все равно попадет в очередь. Создание промиса это синхронная операция. Resolve и reject - асинхронные
@@Юрий-н9в9та вот если then после этого то then микротаск будет
8:51
14:53
Почему попадает в check а не в timers?
в timers попадают только setInterval и setTimeout
где в примере с crypto там 4 асинхр ф-ии ?
Не совсем. Это параллельные функции. Тяжёлые операции вроде crypto попадают в Thread Pool, который находится как бы "за" основным потоком и перекладывается на другие ядра компьютера. То есть в примере с крипто у нас каждую функцию выполняет отдельное ядро компьютера, за счёт чего они выполняются практически одновременно. Таким образом сильно сокращается время, за которое выполняется код
какая разница между двумя фазами i/o ?
I - input (ввод), O - output (вывод). Это операции, связанные с чтением/записью файлов. Возможно, ещё с какими-то, но на ум не приходят
Вау, поздравляю! Самое плохое объяснение из всех которые когда-либо встречал!
почему? Всё предельно понятно же
В IT идут те, кто говорить не умеет? А вообще спасибо, норм материал