Thread Pool в Node.js 🙂
Node.js у нас вроде как “однопоточный”, да? Но это не значит, что у него под капотом нет магии. Помимо Event Loop, в деле ещё участвует thread pool — набор рабочих потоков, которыми управляет библиотека libuv
🐧 Сколько потоков?
По умолчанию их 4. Но если хочется больше — можно поднять значение переменной окружения UV_THREADPOOL_SIZE (максимум до 1024)
😳 Зачем он нужен?
Thread pool берёт на себя тяжёлые и блокирующие задачи, чтобы не нагружать Event Loop. Туда скидываются:
1) операции с файловой системой (fs)
2) криптография (hash, pbkdf2 и т.п.)
3) DNS-резолвы
4) компрессия/декомпрессия
И пока отдельный поток уничтожает задачки — твой основной поток (event loop) спокойно крутит коллбеки и промисы
⌨️ Можно ли к тред пулу обратиться самому?
Напрямую нет, но можешь использовать нативные API (fs, crypto и т.д.), которые уже завязаны на thread pool. А вот если подключаешь native addon (N-API или Nan), то да, там можно регистрировать асинхронные задачки через uv_queue_work. И тогда твой C++ код действительно будет выполняться в thread pool
Кста не путать тред пул и worker_threads — это совсем другой инструмент
В итоге: Node.js сам решает, что кидать в thread pool, но знать о инсутрменте полезно, чтобы понимать почему работа с криптографией не блокирует наш основной поток эвент лупа
🚀 Пост Guru Node.js: @DemetraIT
Post #375
147
- 👍 2
- 🔥 1
- 👏 1