Некоторые асинхронные операции в node.js (например, файловый ввод-вывод в модуле fs
) будут использовать дополнительные потоки в процессе node.js через пул потоков в libuv. Это будет зависеть от размера вашего пула потоков и от того, какие типы операций и от вашей операционной системы хоста, сколько дополнительных процессоров будет задействовано. Это не обязательно помогает общей пропускной способности задействовать много процессоров при файловом вводе / выводе, которые все проходят через один и тот же диск, так как чтение / запись часто оказывается узким местом из-за положения головки чтения / записи на диске.
Некоторые асинхронные операции, такие как работа с сетью (например, модуль http
), не являются блокирующими и асинхронными по своей природе и не выполняют свою сеть с потоками или инициируют какое-либо осмысленное использование дополнительных процессоров.
Ничто из этого не будетзапустить свой собственный Javascript в нескольких потоках, так как сам Javascript все выполняется в одном потоке.
Чтобы полностью задействовать несколько процессоров, вы можете:
- Поместить часть своего собственного Javascript в новый nodejs Рабочие потоки и обратная связь с основным потоком node.js посредством обмена сообщениями.
- Запуск собственных дочерних процессов node.js для выполнения работы в этих дочерних процессах и передачи результатов с использованием одного измножество вариантов межпроцессного взаимодействия.
- Используйте кластеризацию node.js, чтобычто входящие запросы могут быть разделены между доступными очередями. Для этого необходимо убедиться, что любое состояние сервера является общим для всех кластеризованных процессов (обычно хранится в некоторой базе данных, к которой могут обращаться все процессы). Это позволит отдельным запросам использовать отдельные процессоры - это не поможет одному запросу использовать больше процессоров. Для этого вам нужно будет использовать # 1 и / или # 2.