Node.js однопоточен для выполнения JavaScript-кода благодаря механизму Event Loop. Он непрерывно проверяет очередь событий и выполняет соответствующие колбэки.
Для выполнения блокирующих операций (ввод/вывод, работа с файлами, сеть) Node.js использует пул потоков (Thread Pool) из библиотеки libuv. Эти операции выполняются асинхронно в отдельных потоках, не блокируя основной поток Event Loop'а. Результаты или ошибки возвращаются обратно в Event Loop через колбэки.
Ключевые компоненты:
javascript
Таким образом, Node.js обеспечивает высокую производительность для конкурирующих задач за счет неблокирующего ввода/вывода, несмотря на однопоточность выполнения JavaScript.