Вопрос проверяет понимание того, как Node.js реализует асинхронность на уровне ОС и зачем нужна библиотека libuv.
Node.js часто называют однопоточным, но это верно только для выполнения JavaScript. Всё, что связано с сетевыми запросами, файлами, таймерами и DNS, реализовано через библиотеку libuv — кроссплатформенный слой на C, который абстрагирует системные механизмы ввода-вывода.
Когда вы вызываете fs.readFile, Node.js не блокирует главный поток. Задача уходит в пул потоков libuv, а по завершении колбэк возвращается в event loop.
const fs = require('fs');
console.log('start');
fs.readFile('file.txt', 'utf8', (err, data) => {
// выполнится позже, в event loop
console.log('file read');
});
console.log('end');
// start, end, file readСетевые операции (HTTP, TCP) обычно не используют пул потоков — они работают напрямую через неблокирующие сокеты ОС, что делает их очень эффективными.
Понимание libuv помогает объяснить, почему тяжёлые синхронные операции (например, fs.readFileSync или сложные вычисления) блокируют весь сервер, а также почему увеличение UV_THREADPOOL_SIZE может ускорить работу с файлами и DNS.
Итог: libuv — фундамент асинхронности Node.js, объединяющий разные ОС в единый API и обеспечивающий неблокирующий ввод-вывод и event loop.
Уровень
Рейтинг:
4
Сложность:
6
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Node.js Developer в телеграм