Ответ
ThreadPool в Node.js — это набор рабочих потоков (worker threads), управляемых библиотекой libuv, которая лежит в основе его асинхронной архитектуры. Он предназначен для выполнения операций, блокирующих ввод-вывод (I/O) или требующих интенсивных вычислений (CPU-bound), чтобы не блокировать основной поток Event Loop.
Ключевые моменты:
- Размер по умолчанию: 4 потока. Его можно увеличить, установив переменную окружения
UV_THREADPOOL_SIZE(например,UV_THREADPOOL_SIZE=8). - Какие операции используют ThreadPool: Некоторые функции из встроенных модулей, такие как:
fs(часть файловых операций, например,fs.readFile)crypto(например,crypto.pbkdf2,crypto.randomBytes)dns.lookup()(но неdns.resolve)zlib(синхронные и асинхронные API)
Пример использования (модуль crypto):
const crypto = require('crypto');
// Эта операция будет делегирована в ThreadPool
crypto.pbkdf2('myPassword', 'salt', 100000, 64, 'sha512', (err, derivedKey) => {
if (err) throw err;
console.log('Хэш пароля:', derivedKey.toString('hex'));
});
// Event Loop продолжает работать, пока вычисляется хэш
console.log('Этот лог выведется сразу');
Важно: ThreadPool — это не то же самое, что модуль worker_threads. worker_threads предназначен для создания изолированных потоков JavaScript для выполнения настоящих CPU-интенсивных задач на JavaScript-коде, в то время как ThreadPool — это внутренний механизм libuv для оптимизации определенных системных операций.