UA RU
logo
Back-end      12/10/2022

Фундамент для JavaScript-разработчика: как ответить, что такое libuv на собеседовании по Node.js

Владислав Хирса BLOG

Senior Backend Developer | Node.js | NestJS | Express.js | SQL | NoSQL | AWS

Понимание, что такое libuv и как она работает — фундаментальные знания для JavaScript-разработчика, которые, на первый взгляд, могут быть сложными или непонятными, но о них можно рассказать и простыми словами.

Онлайн-курс Data Analytics від Mate academy.
Знижка на курс Data Analytics від Mate academy — ваш шанс стати професіоналом у сфері аналізу даних. Запишіться на курс і розпочніть нову кар'єру в ІТ за вигідною ціною!
Отримати знижку на курс

Из этой статьи вы узнаете ответы на вопросы:

  • Что такое libuv и зачем она нужна?
  • Какие преимущества неблокирующего I/O перед блокирующим?
  • Как работает libuv?
  • Онлайн-курс Data Analytics від Mate academy.
    Знижка на курс Data Analytics від Mate academy — ваш шанс стати професіоналом у сфері аналізу даних. Запишіться на курс і розпочніть нову кар'єру в ІТ за вигідною ціною!
    Отримати знижку на курс
  • Краткая история libuv

Что такое libuv и для чего она нужна

Libuv — это библиотека, которая отвечает за асинхронный ввод/вывод I/Oinput/outputопераций в Node.js.

Но одна из главных задач libuv — это сделать Node.js совместимой с большинством оперативных систем (OS) для нормализации неблокирующих операций. Потому что каждая OS имеет свой интерфейс для работы с демультиплексером событий.

Есть такие интерфейсы как kqueue на macOS, epoll на Linux и I/O Copmletion Port API на Windows и другие менее известные, и с ними всеми нужно работать по их правилам, но хорошо, что это крайне эффективно делает libuv .

Какие преимущества неблокирующего I/O перед блокирующим

Если мы используем язык программирования с многопоточностью, например, такой, как Java, то при поступлении запроса на сервер он создает под каждый запрос отдельный поток (thread), сам процесс создания потока и его обслуживание занимает время, также каждый поток не может обрабатывать несколько соединений, каждая операция I/O в сокете блокирует обработку любого другого соединения.

Курс Python developer від Mate academy.
Опануйте Python та отримайте свою першу роботу в IT! Ми навчимо вас усім необхідним навичкам та допоможемо з працевлаштуванням.
Отримати знижку на курс

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

Итак, основные преимущества неблокирующего I/O в том, что он быстро принимает запрос, регистрирует его, и сразу принимаются другие запросы, когда кто-то из них будет готов — и только тогда он будет вызван. То есть наш поток не прекращает работу, он не блокируется для каждого запроса. По умолчанию используется один поток в Node.js, но даже с одним потоком Node.js может обрабатывать десятки тысяч простых запросов одновременно.

Как работает libuv

Libuv состоит из таких частей как:

  • Демультиплексор событий (Event Demultiplexor)
  • Очереди событий (Event Queue)
  • Цикл событий (Event Loop)

Как это работает:

  1. Первое, что происходит, это приложение отправляет запрос в Event Demultiplexor и назначает обработчик (handler), который будет вызван при завершении операции (operation).
  2. При завершении набора I/O-операций Event Demultiplexor отправляет набор событий в Event Queue.
  3. Онлайн-курс Pyton від Powercode academy.
    Опануйте PYTHON з нуля та майте проект у своєму портфоліо вже через 4 місяця.
    Приєднатися
  4. В этой части Event Loop проводит итерацию по событиям в Event Queue.
  5. Для каждого события вызывается соответствующий обработчик.
  6. И когда handler завершится, то он возвращает управление в Event Loop.
  7. Когда уже все события Event Queue будут обработаны, то Event Loop блокируется и дает управление Event Demultiplexor, которое запускает другой цикл для слежки (не поступили ли новые запросы) и уже потом, после того как Event Demultiplexor получит новый запрос, то Event Loop будет запущен.

И так все происходит по кругу, если у handler на этапе выполнения есть другие запросы в базу данных файловой системы, к другим ресурсам и т.д., то он создает новый запрос и все повторяется.

Краткая история libuv

Библиотека прежде всего спроектирована для использования в Node.js, но применяется также в других программных продуктах, таких как Luvit, Julia, uvloop.

Первоначально это была абстракция вокруг libev, поскольку она поддерживала Unix и не поддерживала IOCP в Windows. В libuv-версии node-v0.9.0 libev была удалена.

Спасибо за внимание и продуктивного кодинга 😉

Читайте также: Овладей настоящей силой в Node.js: разбираем микро- и макрозадачи на примерах

Онлайн-курс "Business English для проджект-менеджерів" від Vocabulaba.
Підсилите англійську для управління іноземними командами та вільної комунікації на співбесідах, презентаціях і зідзвонах. .
Детальніше про курс

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Онлайн-курс “Директор з маркетингу” від Laba.
Як оптимізувати маркетинг-функцію, створити сильну команду та впевнено виводити продукт на нові ринки — навчить Head of Marketing and Growth з 18-річним досвідом у стратегічному маркетингу. .
Детальніше

Этот материал – не редакционный, это – личное мнение его автора. Редакция может не разделять это мнение.

Топ-5 самых популярных блогеров сентября

Всего просмотровВсего просмотров
36
#1
Всего просмотровВсего просмотров
36
Всего просмотровВсего просмотров
29
#2
Всего просмотровВсего просмотров
29
Всего просмотровВсего просмотров
23
#3
Всего просмотровВсего просмотров
23
Career Consultant в GoIT
Всего просмотровВсего просмотров
21
#4
Всего просмотровВсего просмотров
21
Всего просмотровВсего просмотров
18
#5
Всего просмотровВсего просмотров
18
Рейтинг блогеров
Онлайн-курс "Нотації BPMN" від Laba.
Опануйте мову BPMN для візуалізації бізнес-процесів, щоб впорядкувати хаос у них. Після курсу ви точно знатимете, що саме обрати для розв’язання завдань вашого бізнесу. .
Дізнатись більше

Самые обсуждаемые статьи

Топ текстов

Ваша жалоба отправлена модератору

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: