ru:https://highload.today/blogs/fundament-dlya-javascript-razrabotchika-kak-otvetit-chto-takoe-libuv-na-sobesedovanii-po-node-js/ ua:https://highload.today/uk/blogs/yak-vidpovisty-shho-take-libuv-na-spivbesidi-po-node-js/
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 в сокет блокує обробку будь-якого іншого з’єднання.

Курс QA Manual (Тестування ПЗ мануальне) від Powercode academy.
Навчіться знаходити помилки та контролювати якість сайтів та додатків.
Записатися на курс

І таким чином кожен потік забирає пам’ять та використовує 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. Курс "Web design" від Web-academy.
    Швидкий початок кар'єри у сфері IT! Опануйте професію веб-дизайнера — почніть самостійно керувати своїм часом й отримувати високий дохід вже за 9 тижнів.
    Дізнатися більше
  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: розбираємо мікро- та макрозадачі на прикладах

Курс English For IT: Communication від Enlgish4IT.
Почни легко працювати та спілкуватися з мультикультурними командами та міжнародними клієнтами. Отримайте знижку 10% за промокодом ITCENG.
Інформація про курс

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

Курс Job Interview Crash Course від Enlgish4IT.
Отримайте 6 шаблонів відповідей на співбесіді, які ви зможете використовувати для структурування своїх відповідей. Отримайте знижку 10% за промокодом ITCENG.
Приєднатися

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

Топ-5 найпопулярніших блогерів березня

PHP Developer в ScrumLaunch
Всего просмотровВсього переглядів
2229
#1
Всего просмотровВсього переглядів
2229
Founder at Shallwe, Python Software Engineer (Django/React)
Всего просмотровВсього переглядів
111
#2
Всего просмотровВсього переглядів
111
Career Consultant в GoIT
Всего просмотровВсього переглядів
93
#3
Всего просмотровВсього переглядів
93
CEO & Founder в Trustee
Всего просмотровВсього переглядів
92
#4
Всего просмотровВсього переглядів
92
Рейтинг блогерів

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

Топ текстів

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

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

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