Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що являє собою подієва модель?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Подієва модель** - архітектурний принцип, за якого програма не виконує задачі послідовно, а реагує на події; у Node.js це реалізовано через `EventEmitter` (джерело подій), `Event Loop` (цикл, що перевіряє чергу) і `libuv` (неблокуючий I/O). **Ключове:** ця модель неефективна для CPU-інтенсивних задач - поки потік зайнятий обчисленнями, він не може реагувати на інші події, тож такі задачі варто виносити у Worker Threads.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 1. Що таке подієва модель у загальному сенсі > **Подієва модель** - це архітектурний принцип, > за якого програма **не виконує задачі послідовно**, а **реагує на події**, що відбуваються в зовнішньому чи внутрішньому середовищі. Замість "зроби це, потім це" → використовується принцип "**коли станеться подія X - виконай дію Y**". ### Приклад для розуміння Замість блокуючого коду: ```javascript const data = fs.readFileSync('file.txt'); console.log(data); ``` у подієвій моделі: ```javascript fs.readFile('file.txt', (err, data) => { console.log(data); }); ``` Тут: - Node.js *не чекає*, поки файл прочитається; - вона *реагує*, коли система **згенерує подію** "читання завершено". ## 2. Як це влаштовано всередині Node.js Подієва модель Node.js базується на двох ключових механізмах: 1. **EventEmitter** - об'єкт, що генерує події й підписується на них. 2. **Event Loop (цикл подій)** - механізм, що постійно перевіряє, чи є події чи callback-и, готові до виконання. ### Спрощений цикл роботи Event Loop ```javascript while (програма працює) { чекаємо подій (I/O, таймери, network) якщо подія відбулася: викликаємо її обробник (callback) } ``` ## 3. Компоненти подієвої моделі | Компонент | Опис | |---|---| | **EventEmitter** | "Джерело подій". Генерує (`emit`) події й викликає слухачів (`on`). | | **Event Loop** | Цикл, що відстежує події й викликає callback-и. | | **Callback Queue** | Черга задач (обробників подій), що чекають виконання. | | **libuv** | Низькорівнева бібліотека, яка реалізує неблокуючий I/O та інтеграцію з ОС. | ## 4. Приклад життєвого циклу події ```javascript const fs = require('fs'); fs.readFile('file.txt', (err, data) => { console.log('Файл прочитано!'); }); ``` Що відбувається "під капотом": 1. Node.js надсилає задачу читання файлу в **libuv** (I/O API). 2. libuv виконує операцію в окремому **потоці пулу**. 3. Коли операція завершена, **libuv генерує подію** "готовий результат". 4. **Event Loop** отримує цю подію. 5. Callback із `readFile()` поміщається в **чергу подій**. 6. Event Loop викликає callback → "Файл прочитано!" виводиться в консоль. ## 5. Чому подієва модель ефективна | Перевага | Пояснення | |---|---| | Неблокуючий I/O | Потік не чекає завершення операцій - працює з іншими подіями. | | Масштабованість | Один потік здатен обробляти тисячі з'єднань. | | Менше ресурсів | Не потрібно створювати потік чи процес на кожне з'єднання. | | Проста реактивна логіка | Замість циклів очікування - підписки на події (`on`, `once`). | ## 6. Коли подієва модель не підходить Вона **неефективна для CPU-інтенсивних задач** (наприклад, обчислень, криптографії, парсингу відео). Поки потік зайнятий обчисленнями, він не може реагувати на інші події. Рішення: - використовувати **Worker Threads**; - розбивати важкі задачі на **асинхронні частини**; - виносити обчислення в окремий мікросервіс. ## Підсумок > **Подієва модель Node.js** - це архітектура, де виконання програми керується **подіями й реакціями на них**, > а не послідовним виконанням коду. > > Вона базується на: > > - **EventEmitter** (генерація подій), > - **Event Loop** (обробка подій), > - **Callback Queue** (черга зворотних викликів). > > Завдяки цьому Node.js може ефективно виконувати **неблокуючий I/O** > і обслуговувати **десятки тисяч з'єднань в одному потоці**.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.