Event loop в Node.js

Поділитися
Вставка
  • Опубліковано 29 вер 2024
  • Сергей Аванесян, Senior Software Engineer EPAM
    «Хочешь понимать, что у NodeJS под капотом? Тогда этот доклад для тебя!
    Я расскажу про то, как устроен и работает eventloop в NodeJS. Во время доклада разберем всё на практическом примере с визуализацией».
    Ссылка для скачивания презентации: events.epam.co...

КОМЕНТАРІ • 52

  • @atk65223
    @atk65223 4 роки тому +41

    Спасибо, крутой доклад. Единственное что, лучше бы слайд постоянно показывали на полный экран, а аудиторию где-то в углу. На аудиторию не очень интересно смотреть, а слайд не видно.

    • @AlexP-qm7ew
      @AlexP-qm7ew 3 роки тому +3

      Как решение - скачать презентацию по ссылке и открыть в окне рядом, если есть такая возможность

  • @aleksandrmatyka3118
    @aleksandrmatyka3118 2 роки тому

    Отличный доклад

  • @fruitypie
    @fruitypie 4 роки тому +2

    У nextTick() приоритет над таймерами и они выполняются быстрее, но, авторы многих популярных книг по ноде вообще не рекомендуют использовать данный метод
    Автору не помешало бы приводить побольше реальных примеров, а так, спасибо за доклад

  • @alexeycherneny1431
    @alexeycherneny1431 8 місяців тому +2

    Я попробовал воспроизвести этот пример но получил результат иной. Поправьте пожалуйста если я не прав:
    //------------------------------------------------------------------------------
    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

  • @tshch8571
    @tshch8571 5 років тому +25

    Странно, что не упомянули автора в тексте.
    Сергей Аванесян, запомните этого парня!

  • @denisdk7912
    @denisdk7912 5 років тому +31

    Спасибо за доклад, лучшее что видел про event loop ноды

  • @andriiveretko3399
    @andriiveretko3399 3 роки тому +6

    В новых версиях ноды setIntermidiate() имеет выше приоритет и колбэк будет выполнен уже в нынешнем цикле

  • @ЕвгенийИванов-и6е6м
    @ЕвгенийИванов-и6е6м 4 роки тому +11

    За пол часа, понять как строить архитектуру кода. Очень информационный доклад без воды!

  • @Dragolietel
    @Dragolietel 2 роки тому +1

    С файлом немного не точный пример - он туда не заходит потому что файл может быть еще не прочитан и сообщение вообще не в мессейдж кью

  • @DBFEnd
    @DBFEnd 6 місяців тому +1

    Классное видео, но к сожалению допущена ужасная и очень важная для понимания ошибка в описании: микротаски выполняются не после каждой макрофазы, а после каждой задачи из макрофазы. Аналогия такая же как в браузерном ивентлупе, только тут 6 макроочередей вместо 1

    • @NikolayKharitonov
      @NikolayKharitonov 2 місяці тому

      Это зависит от версии ноды. Вплоть до v10 включительно обе очереди микротасок обрабатывались между фазами, и только начиная с v11 микротаски обрабатываются также и между обработкой коллбеков.

    • @igorlyatskiy3864
      @igorlyatskiy3864 4 дні тому

      Тоже долго думал над этим. Спасибо за комментарий!

  • @ПетърТодоров-о7ф
    @ПетърТодоров-о7ф 2 роки тому +7

    Лучшее объяснение по этой теме. Посмотрел видосов 10 как на русском, так и на английском, читал документацию, лазил по разным сайтам, но именно благодаря вашему объяснению понял как это работает.

  • @alenalinkevich4489
    @alenalinkevich4489 5 років тому +6

    Спасибо большое, очень классный и нужный доклад. Пересмотрела и перечитала кучу всего, этот самый понятный.

    • @AkkayHT228
      @AkkayHT228 5 років тому

      Alena Linkevich как успехи, уже выучили?

  • @torodinson5260
    @torodinson5260 4 роки тому +3

    почему readfile идет в poll ? это же i/o колбэк

  • @piano9446
    @piano9446 3 роки тому +2

    Thank you Sergey jan, this is a really very helpful, detailed presentation.

  • @EugenePetrov-l6l
    @EugenePetrov-l6l 9 місяців тому +1

    Лучшая подача про event loop

  • @Fayzov
    @Fayzov 4 роки тому +2

    Ахуенно! Спасибо за доклад!

  • @MasharipovSaidbek
    @MasharipovSaidbek 2 роки тому +1

    Thanks, Great work!

  • @glebbondarenko67
    @glebbondarenko67 9 місяців тому

    Как я понял DataLoader основан на том что nextTick выполняется перед Promise

  • @ykartoev
    @ykartoev 4 роки тому +2

    Крутой доклад, большое спасибо!

  • @ДанилаШиянов
    @ДанилаШиянов 10 місяців тому

    почему при использовании module вместо require другой порядок

  • @АнуарбекЗакирьянов

    Super!

  • @surho007
    @surho007 3 роки тому +1

    Супер офигенное обьяснение

  • @glebandreev7095
    @glebandreev7095 Рік тому

    стоило начинать с паттерна реактор и демультиплексирования событий, только потом говорить про event loop и уточнить, что по факту нет такого количества очередей под каждую фазу, есть только Event Queue, которую libuv разбирает в соответсвии в фазами

  • @evgenylevchenya8734
    @evgenylevchenya8734 3 роки тому

    Попробуйте обернуть всё в асинхронную функцию и добавьте await к промисам или докинуть fs/promises

  • @jaisharma8056
    @jaisharma8056 Рік тому

    Можешь сделать то же видео в английском переводе?

  • @321123580
    @321123580 2 роки тому

    Это Мартиросян?

  • @dawitadmassu2947
    @dawitadmassu2947 2 роки тому

    no English version please ?

  • @yennms5547
    @yennms5547 9 місяців тому

    Отличное видео, спасибо!

  • @dima19972525
    @dima19972525 2 роки тому

    топ доклад, лектор красавчик, оч понравилось

  • @alexeylozenko6093
    @alexeylozenko6093 2 роки тому

    Коротко и просто очереди и приоритет их выполнения.

  • @daniildmitriev7426
    @daniildmitriev7426 2 роки тому

    Приложите листинг кода плиз

  • @АлександрЧепрасов-с4й

    Очень круто! Спасибо!

  • @БольшойБрат-з4р

    Сразу зарезолвленный промис это синхронная операция?

    • @Юрий-н9в9т
      @Юрий-н9в9т 11 місяців тому

      Нет, он все равно попадет в очередь. Создание промиса это синхронная операция. Resolve и reject - асинхронные

    • @fili_9485
      @fili_9485 6 місяців тому

      ​@@Юрий-н9в9та вот если then после этого то then микротаск будет

  • @TyrboCreed
    @TyrboCreed 4 роки тому

    14:53
    Почему попадает в check а не в timers?

    • @bohdanivanychko7702
      @bohdanivanychko7702 4 роки тому +2

      в timers попадают только setInterval и setTimeout

  • @torodinson5260
    @torodinson5260 3 роки тому

    где в примере с crypto там 4 асинхр ф-ии ?

    • @РусланЮсуфов-ф3ш
      @РусланЮсуфов-ф3ш 3 роки тому +2

      Не совсем. Это параллельные функции. Тяжёлые операции вроде crypto попадают в Thread Pool, который находится как бы "за" основным потоком и перекладывается на другие ядра компьютера. То есть в примере с крипто у нас каждую функцию выполняет отдельное ядро компьютера, за счёт чего они выполняются практически одновременно. Таким образом сильно сокращается время, за которое выполняется код

  • @torodinson5260
    @torodinson5260 3 роки тому +1

    какая разница между двумя фазами i/o ?

    • @РусланЮсуфов-ф3ш
      @РусланЮсуфов-ф3ш 3 роки тому +1

      I - input (ввод), O - output (вывод). Это операции, связанные с чтением/записью файлов. Возможно, ещё с какими-то, но на ум не приходят

  • @user-jt7wb3zc1m
    @user-jt7wb3zc1m 3 роки тому +1

    Вау, поздравляю! Самое плохое объяснение из всех которые когда-либо встречал!

    • @idiotidiot2805
      @idiotidiot2805 2 роки тому

      почему? Всё предельно понятно же

  • @suazdee
    @suazdee 3 роки тому +1

    В IT идут те, кто говорить не умеет? А вообще спасибо, норм материал