Чтобы полностью использовать вычислительные ресурсы N ядер, вам нужно по крайней мере N потоков, готовых сделать полезную работу. Это не имеет ничего общего с EC2;просто так работают компьютеры.Из вашего вопроса я предполагаю, что вы выбираете между типами экземпляров m1.medium
и m1.large
, которые имеют 1 и 2 выделенных ядра соответственно (m1.small
- это половина общего ядра, а m1.xlarge
- полноевыделенная 4-х ядерная коробка).Таким образом, вам нужно по крайней мере 2 процесса, выполняющих полезную работу, чтобы использовать больший блок (если только вам не нужен доступ к большему количеству памяти / ввода-вывода).
Каждый процесс Node.js имеет однопотоковую структуру. Это позволяет ему обеспечить чистую парадигму программирования, свободную от семантики блокировки.Это очень много задумано.
Чтобы приложение Node.js использовало несколько ядер, оно должно порождать несколько процессов. Эти процессы будут использовать некоторую форму обмена сообщениями (каналы, сокеты,и т. д.) для обмена данными - в отличие от «разделяемой памяти», где код может напрямую изменять области памяти, видимые для нескольких процессов, что потребует семантики блокировки.
На практике это очень просто установить.В Node.JS v0.6.X модуль «кластер» был интегрирован в стандартный дистрибутив, что облегчает настройку нескольких рабочих узлов, которые могут прослушивать один порт.Обратите внимание, что этот «кластерный» модуль НЕ совпадает с модулем «кластера» learnboost, который имеет другой API и владеет именем «кластера» в реестре NPMjs.
http://nodejs.org/docs/latest/api/cluster.html
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
http.Server(function(req, res) { ... }).listen(8000);
}