# Utilizzare tutti i core CPU con il modo cluster

> Inizia diversi processi lavoratori dietro un unico porto con l'opzione cluster di Total.run(), e sa cosa è condiviso tra loro e cosa non è.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: it
Content-SHA256: 87898bac297dc05eaf990b3b72ae031ae3998c7695c0da50eab9b421a3a4d2ce
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Un processo Node.js usa un solo core della CPU. `Total.run({ cluster: N })` avvia un **master** che crea `N` processi worker, ciascuno con l'intera applicazione, e il sistema operativo ripartisce tra loro le connessioni in arrivo (`'auto'` al posto di un numero lascia che il master aggiunga thread al crescere del carico). Eseguilo in modalità release (`release: true`, che lo script di avvio generato attiva con `--release`); il watcher della modalità debug non è pensato per un cluster. Nello script di avvio è una sola opzione:

```js
Total.run({ cluster: 4, release: true }); // or cluster: 'auto'
```

Ogni worker è un processo separato con la propria memoria, quindi tutto ciò che tieni in una variabile, in `CACHE` o in `MEMORIZE` esiste una volta **per worker** e non è condiviso: due richieste dello stesso utente possono finire su worker diversi. Tieni lo stato condiviso in un database, in un archivio di file o in un servizio di messaggi, e conserva le sessioni in un archivio che tutti i worker possano leggere. Anche le attività pianificate come `CRON()` girano in ogni worker, quindi proteggile se devono essere eseguite una sola volta.

**Controlla che tutti i worker siano attivi.** Dopo un deploy, richiedi più volte un URL come `/pid/` qui sotto e conta gli id distinti: devono essere tanti quanti i worker richiesti.

Ogni lavoratore ha il proprio ID di processo.L'esempio inizia con due lavoratori e include questo ID nella risposta.

```js controllers/pid.js
exports.install = function() {
	ROUTE('GET /pid/', pid);
	ROUTE('GET /dir/', dir);
};

function pid($) {
	$.json({ pid: process.pid });
}

function dir($) {
	$.json({ dir: PATH.root() });
}
```

```js cluster.js
require('total5');
Total.run({ cluster: 2, port: 8766, release: true });
```
