З чого складається рантайм Node.js?
More details in the official Node.js docs - About Node.js
1. V8 Engine (рушій JavaScript)
- Це той самий рушій, що використовується в Google Chrome.
- Він компілює JavaScript у машинний код (JIT - Just-In-Time compilation).
- Відповідає за:
- інтерпретацію й виконання JS-коду;
- керування пам'яттю (garbage collection);
- оптимізацію коду під час виконання.
Саме завдяки V8 Node.js може виконувати JavaScript напряму, без браузера.
2. libuv (асинхронність та I/O)
- Це бібліотека на C, яка забезпечує:
- Event Loop - головний цикл подій;
- Thread Pool - пул потоків для фонових задач;
- неблокуюче введення-виведення (I/O);
- роботу з файловою системою, мережевими сокетами й таймерами.
- Завдяки libuv Node.js може обробляти безліч запитів одночасно без блокувань.
3. Bindings (C++ Bindings)
- Це "міст" між JS-світом (V8) і нативним кодом (libuv, системні бібліотеки).
- Node.js використовує Node bindings для виклику функцій, написаних на C/C++, з JavaScript.
- Наприклад, коли ти викликаєш
fs.readFile(), під капотом вона через bindings звертається до системних викликів операційної системи.
4. Core Modules (вбудовані модулі Node.js)
- Реалізовані поверх V8 і libuv, і включають:
fs(файлова система);http,https;net,dns;path,url,stream,eventsта ін.
- Ці модулі - частина Node.js API, написана на C++ і JavaScript, щоб розробник міг працювати на високому рівні.
5. Event Loop
- Серце асинхронної моделі Node.js.
- Це нескінченний цикл, який:
- отримує задачі з черг (таймери, I/O, callback-и тощо);
- розподіляє їх по фазах;
- виконує їх у порядку пріоритету.
- Event Loop керується бібліотекою libuv.
6. Thread Pool (пул потоків)
- Усередині libuv є пул із 4 потоків (за замовчуванням).
- Він використовується для виконання важких операцій, не залежних від основного потоку Event Loop - наприклад, операцій із файлами, DNS, криптографією.
7. C/C++ Core та Node API
- Низькорівневі частини Node.js, написані на C/C++, відповідають за:
- ініціалізацію середовища;
- керування пам'яттю;
- взаємодію з ОС;
- підтримку
process,Buffer,streamsта ін.
8. Node.js CLI та REPL
- Оболонка, через яку запускається код (
node script.js). - Підтримує REPL (інтерактивне виконання команд).
- Ініціалізує рантайм, підключає V8, libuv і модулі ядра.
Коротка структура:
javascript
┌────────────────────────┐
│ Node.js CLI / REPL │
└────────────┬───────────┘
▼
┌────────────────────────┐
│ Node.js Core (C++) │
│ (Bindings, Buffer, API) │
└────────────┬───────────┘
▼
┌────────────────────────┐
│ libuv (I/O) │
│ Event Loop, Threads │
└────────────┬───────────┘
▼
┌────────────────────────┐
│ V8 Engine (JS) │
└────────────────────────┘Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.