logo
Разработка Web-приложения с использованием JavaScript каркаса Node.js

2.3 Использование всех процессорных ядер в многоядерной системе

V8 - однопоточный движок JavaScript. Для браузера Chrome этого достаточно, однако означает, что Node-сервер, работающий на только что купленном 16-ядерном сервере, задействует всего одно ядро, а 15 остальных простаивают.

Однопоточный процесс использует только одно процессорное ядро. Это факт, от которого никуда не уйти. Чтобы задействовать в одном процессе несколько ядер, необходима многопоточная программа. Однако принятая в Node парадигма проектирования без потоков, хотя и позволяет упростить модель программирования, одновременно означает, что Node не использует несколько ядер.

Есть несколько проектов, посвященных разработке многопроцессных конфигураций Node для повышения надежности и задействования всех имеющихся процессорных ядер.

Основная идея состоит в том, чтобы запустить несколько процессов Node и распределять между ними поступающие запросы. Имея кластер из однопоточных процессов, вы сможете использовать все ядра.

Один из таких проектов называется Cluster (https://github.com/LearnBoost/cluster), авторы описывают его как «расширяемый менеджер многоядерных серверов для Node.js». Он запускает конфигурируемый набор дочерних процессов, перезапускает их после сбоя и располагает богатыми средствами протоколирования, управления из командной строки и сбора статистики. Более ранний проект Spark закрылся, уступив место Cluster.