Node.js: Utilizzare tutti i core CPU disponibili

Questa documentazione fa parte della guida Prime operazioni. Consulta la guida completa qui: Scoprite come distribuire rapidamente e in sicurezza un servizio Node.js su Stackhero.

👋 Benvenuto nella documentazione di Stackhero!

Stackhero offre un ambiente Node.js cloud pronto all'uso, progettato per aiutarti a lavorare più velocemente:

  • Distribuisci in produzione in pochi secondi con un semplice git push. Non sono necessari strumenti aggiuntivi o configurazioni manuali.
  • Utilizza il tuo dominio e approfitta dei certificati HTTPS automatici, mantenendo la tua applicazione sicura senza configurazioni extra.
  • Backup automatici, aggiornamenti con un clic e prezzi prevedibili ti permettono di concentrarti sulle funzionalità, mentre Stackhero gestisce l'infrastruttura per te.
  • Basato su infrastruttura privata e dedicata per prestazioni costanti e sicurezza elevata.

Risparmia tempo e riduci la complessità operativa: puoi avere la tua applicazione in esecuzione su l'hosting Node.js cloud di Stackhero in pochi minuti.

Per impostazione predefinita, Node.js utilizza un solo core e un solo thread. Per sfruttare tutti i core CPU disponibili, potete utilizzare l'API cluster di Node.js. La documentazione ufficiale è disponibile qui: https://nodejs.org/api/cluster.html.

Ecco un esempio semplice che crea un server HTTP utilizzando tutte le CPU disponibili:

const cluster = require('cluster');
const http = require('http');
const cpusCount = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Fork dei worker
  for (let i = 0; i < cpusCount; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} died`);
  });
} else {
  // I worker condividono qualsiasi connessione TCP, in questo caso un server HTTP
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('hello world\n');
  }).listen(8000);

  console.log(`Worker ${process.pid} started`);
}