Розуміння що таке 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 в сокет блокує обробку будь-якого іншого з’єднання.
І таким чином кожен потік забирає пам’ять та використовує CPU, тож кількість потоків та час їхнього життя використовують набагато більше потужностей сервера в тих випадках, де Node.js дає раду без проблем (чати, стрімінг відео тощо).
Тож основні переваги не блокуючого I/O в тому, що він швидко приймає запит, реєструє його і одразу приймаються інші запити, коли хтось з них буде готовий — і тільки тоді він буде викликаний. Тобто наш потік не припиняє роботу, він не блокується для кожного запиту. За замовчуванням використовується один потік в Node.js, але навіть і з одним потоком Node.js може обробляти десятки тисяч простих запитів одночасно.
Як працює libuv
Libuv складається з таких частин як:
- Демультиплексор подій (
Event Demultiplexor
) - Черги подій (
Event Queue
) - Цикл подій (
Event Loop
)
Як це працює:
- Перше що відбувається, це програма відправляє запит до
Event Demultiplexor
та назначає обробник (handler
), який буде визвано при завершені операції (operation
). - При завершенні набору I/O-операцій
Event Demultiplexor
відправляє набір подій доEvent Queue
. - В цій частині
Event Loop
проводить ітерацію по подіям вEvent Queue
. - Для кожної події викликається відповідний обробник.
- І коли
handler
завершиться, то він повертає управління доEvent Loop
. - Коли вже всі події
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: розбираємо мікро- та макрозадачі на прикладах
Favbet Tech – це ІТ-компанія зі 100% українською ДНК, що створює досконалі сервіси для iGaming і Betting з використанням передових технологій та надає доступ до них. Favbet Tech розробляє інноваційне програмне забезпечення через складну багатокомпонентну платформу, яка здатна витримувати величезні навантаження та створювати унікальний досвід для гравців.
Цей матеріал – не редакційний, це – особиста думка його автора. Редакція може не поділяти цю думку.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: