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-розробника, які на перший погляд можуть бути складними або незрозумілими, але про них можливо розповісти і простими словами.

Із цієї статті ви дізнаєтеся відповіді на запитання:

  • Що таке libuv та для чого вона потрібна?
  • Які переваги не блокуючого I/O перед блокуючим?
  • Як працює libuv?
  • Коротка історія 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 в сокет блокує обробку будь-якого іншого з’єднання.

Онлайн-курс "Асинхронне програмування" від robot_dreams.
Опануйте підходи асинхронного програмування на Python для розробки швидких та ефективних програм.Вас навчатиме Lead Python Software Engineer у SoftServe.
Детальніше про курс

І таким чином кожен потік забирає пам’ять та використовує 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. Онлайн- курсPython developer від Mate academy.
    Курс Python developer з гнучким графіком ідеально підходить новачкам. Отримайте нову роботу вже через 7 місяців навчання! .
    Отримати знижку на курс
  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: розбираємо мікро- та макрозадачі на прикладах

Онлайн-курс "People Management" від Laba.
Пройдіть шлях від формування відповідальної команди до написання кар'єрної карти для кожного співробітника разом з топменеджеркою з 11-річним досвідом у провідних IT-компаніях.
Детальніше про курс

Якщо ви знайшли помилку, будь ласка, виділіть фрагмент тексту та натисніть Ctrl+Enter.

Англійська для початківців від Englishdom.
Для тих, хто тільки починає вивчати англійську і хоче вміти використовувати базову лексику і граматику.
Реєстрація на курс

Цей матеріал – не редакційний, це – особиста думка його автора. Редакція може не поділяти цю думку.

Найбільш обговорювані статті

Топ текстів

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

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

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