Почему Node.js крутит 7 потоков на процесс - PullRequest
1 голос
/ 02 мая 2020

Когда процесс Node.js запускается, команда top показывает 7 потоков, прикрепленных к процессу. Что делают все эти темы? Кроме того, по мере увеличения нагрузки на API, когда сами обработчики запросов асинхронно ожидают другие вызовы API восходящего потока, Node порождает дополнительные рабочие потоки? Вверху я вижу, что это так. Но я думал, что это происходит только для файлового ввода-вывода. Зачем ему нужны эти дополнительные рабочие потоки?

1 Ответ

2 голосов
/ 02 мая 2020

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 (поэтому они, скорее всего, в конечном итоге будут создавать больше чем одна новая тема).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...