WEBYK WEBYK Індивідуальні OnLine уроки з web технологій
+38 093 766 39 11
oleggpann@gmail.com

Что действительно делает Node.js отличным

Ммм… Короче говоря, я хотел узнать, как работает этот чертов узел. Прочитайте много документов, говорящих, что это асинхронный, однопоточный, все это основано на цикле событий и еще много чего. В основном, слова были страшными, я имею в виду, что каждый парень говорит что-то огромное, используя первоклассный словарь, и это просто испугало меня до чертиков, и мой мозг был как «Чувак, просто прекрати, это не твой уровень». Что ж, после продолжительных трех 40-минутные сессии Pomodoro (кстати, это действительно работает, и я скоро напишу об этом) и 3 чашки черного кофе, я думаю, что я наконец-то получил это.

Узел не однопоточный, да, но это не совсем так

ЧТО !!! поверьте мне, это была моя реакция, когда я впервые нашел это. Да, Node является однопоточным, или нет, или да… ну, в основном, он обрабатывает пользовательский код в однопоточном режиме (где происходит волшебство цикла событий). Очевидно, что Node должен быть однопоточным, поскольку Js является однопоточным, но некоторые части изначально обрабатываются libuv и ОС, которые являются многопоточными. Смешение? мы просто разберем его более простым способом и вернемся к этому.

Узел сохраняет единый поток для вашего кода, но все работает параллельно

Во-первых, давайте начнем с простой концепции, называемой синхронной и асинхронной программой. Синхронная программа - это то, что выполняется по одному за раз. Если одно задание не завершено, вы не сможете перейти к следующему. Принимая во внимание, что асинхронная программа позволяет вам перейти к следующей строке, запустив текущую строку параллельно. Хорошо, это легко, но как Node.js достигает этого? используя мощную простую концепцию, называемую callback. Обратный вызов, как написано в документации по Node.js, «является функцией, вызываемой при завершении данной задачи; это предотвращает любую блокировку и позволяет в то же время запускать другой код ». Это означает, что всякий раз, когда мы пишем асинхронный код, вы можете просто использовать функцию обратного вызова, сообщая, что она будет вызываться по завершении, когда вы переходите к следующая вещь. Это то, что в основном является неблокирующим методом. Node.js обрабатывает операции ввода-вывода неблокирующим образом, который содержит функции обратного вызова, так что ничто не будет заблокировано, и мы можем выполнить несколько дерьмов одновременно. Итак, теперь, когда мы знаем, как Node.js обрабатывает асинхронный код, давайте перейдем к реальной вещи, печально известной петле событий. Цикл обработки событий - это то, что обрабатывает и обрабатывает события и преобразует их в обратные вызовы. Таким образом, всякий раз, когда поступает вызов ввода-вывода, узел отправляет его в цикл событий, где он попадает в очередь задач и начинает выполнение, когда узел возвращается обратно в среду выполнения и переходит к следующему. Теперь возвращается к первому подзаголовку. Узел не однопоточный. Мм… Всякий раз, когда мы пишем асинхронный код, Node переносит пользовательский сценарий в один поток, а операции ввода-вывода обрабатываются Libuv и ОС, т. Е. Libuv имеет нечто, называемое пул потоков, где каждый из потоков назначается задаче из очередь задач по циклу событий, и они начинают выполняться одновременно. Итак, вся архитектура Node.js позволяет легко иметь высокоуровневый параллелизм. Поэтому это то, что делает Node.js великолепным, имея поддержку асинхронного кода и запуска его в одном потоке (хотя и не совсем). Ну, я думаю, это покрывает это. Я надеюсь, что это имеет смысл, если нет, дайте мне знать - так как я действительно хочу знать больше,

Теги

Потоки циклов событий Javascript Nodejs Асинхронная и синхронная разработка сред выполнения Кодирование

Комментарии

nikosv 3 сентября 2019 г.

Это объясняет, как обрабатывается вызов ввода / вывода. Но что случилось? ручки, когда есть вызов, связанный с процессором? как он справляется с этим?

richard-kenneth-eng 3 сентября 2019 г.

Чтение не блокирует цикл событий.

Это ахиллесова пята узла: ошибочный поток может вызвать Узел блокировать, тем самым склеивая работы.

Именно поэтому многие разработчики переключаются с Node и используют такие инструменты, как Golang, который поддерживает настоящее параллельное программирование относительно простым и удобным способом.

Продолжить обсуждение
Источник: https://hackernoon.com/the-power-of-nodejs-xtj4307y

Якщо у вас виникли питання, вбо ви бажаєте записатися на індивідуальний урок, замовити статтю (інструкцію) або придбати відеоурок, пишіть нам на:
скайп: olegg.pann
telegram, viber - +380937663911
додавайтесь у телеграм-канал: t.me/webyk
email: oleggpann@gmail.com
ми у fb: www.facebook.com/webprograming24
Обов`язково оперативно відповімо на усі запитіння


Поділіться в соцмережах



Подобные статьи:


facebook
×
Підришіться на цікаві пости.
Підписатись