LIBUV (базовая кроссплатформенная системная библиотека, в которую встроена node.js) использует пул потоков для определенных операций, таких как дисковый ввод-вывод и некоторые операции шифрования. По умолчанию этот пул потоков содержит 4 потока.
Плюс, есть поток для выполнения вашего Javascript, так что приходится 5.
Затем, похоже, есть поток, используемый сборщиком мусора для фоновой маркировки объектов (за эта ссылка от разработчика V8 ) и эта статья . Это было бы 6.
Я точно не знаю, каким будет 7-й. Возможно, есть поток, используемый самим событием l oop.
Затем, начиная примерно с 2018 года, кажется, что nodejs переключился на отдельный набор потоков для DNS-запросов (отдельно от файла Пул потоков ввода / вывода). Вероятно, это было связано с проблемами в node.js, где 4 медленных DNS-запроса могли заблокировать весь файловый ввод-вывод, поскольку они захватили пул потоков. Итак, теперь похоже, что node.js использует библиотеку C -ARES для DNS, которая создает собственный набор потоков.
FYI, вы можете контролировать размер пула потоков с помощью переменная окружения UV_THREADPOOL_SIZE
.
И, конечно, вы можете создавать свои собственные рабочие потоки, которые фактически создают новые экземпляры механизма выполнения V8 Javascript (поэтому они, скорее всего, в конечном итоге будут создавать больше чем одна новая тема).