В указанном документе четко указано, что Node является однопоточным:
Один экземпляр Node.js выполняется в одном потоке.Чтобы воспользоваться преимуществами многоядерных систем, пользователь иногда захочет запустить кластер процессов Node.js для обработки нагрузки.
Таким образом, процесс Node имеет один поток, если только новые потоки не являютсясозданные с соответствующими API, такими как child_process
, cluster
, собственные надстройки или несколько встроенных модулей , использующих libuv
тредпул:
Используются API-интерфейсы асинхронной системыNode.js, когда это возможно, но там, где они не существуют, пул потоков libuv используется для создания API-интерфейсов асинхронных узлов на основе API-интерфейсов синхронных систем.API-интерфейсы Node.js, использующие пул потоков:
все API-интерфейсы fs, кроме API-интерфейсов наблюдателя файлов и явно синхронных
crypto.pbkdf2 ()
crypto.randomBytes (), если только он не используется без обратного вызова
crypto.randomFill ()
dns.lookup ()
все API-интерфейсы zlib, кроме тех, которые явно указанысинхронный
В одном потоке используется 1 ядро ЦП, чтобы максимально использовать имеющиеся ресурсы и использовать многоядерный ЦП, должно быть несколько потоков, как правило, количество ядер используется..
Если процессы кластера занимают 100% ЦП, и известно, что существуют другие потоки или внешние процессы (служба базы данных), которые будут бороться за ядра ЦП с процессами кластера, число процессов кластера может быть уменьшено.