# Použijte všechny CPU kódy v klastru

> Začněte několik pracovních procesů za jedním portem s možností klastru Total.run(), a vědět, co je mezi nimi sdíleno a co není.

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

Proces Node.js využívá jedno jádro procesoru. `Total.run({ cluster: N })` spustí **master**, který vytvoří `N` procesů worker, z nichž každý spouští celou vaši aplikaci, a operační systém mezi ně rozděluje příchozí spojení (`'auto'` místo čísla nechá master přidávat vlákna podle rostoucí zátěže). Spouštějte ho v režimu release (`release: true`, který vygenerovaný startovací skript nastaví pomocí `--release`); watcher režimu debug není pro cluster určen. Ve startovacím skriptu jde o jedinou volbu:

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

Každý worker je samostatný proces s vlastní pamětí, takže vše, co uložíte do proměnné, do `CACHE` nebo do `MEMORIZE`, existuje jednou **pro každý worker** a nesdílí se: dva požadavky téhož uživatele mohou skončit u různých workerů. Sdílený stav ukládejte do databáze, do souborového úložiště nebo do služby zpráv a relace držte v úložišti, které mohou číst všichni workeři. Plánované úlohy jako `CRON()` se také provádějí v každém workeru, takže je ošetřete, pokud se mají provést jen jednou.

**Zkontrolujte, že všichni workeři běží.** Po nasazení opakovaně vyžádejte URL jako `/pid/` níže a spočítejte různá id: mělo by jich být tolik, kolik workerů jste žádali.

Každý zaměstnanec má svůj vlastní procesní ID. Příklad začíná dvěma zaměstnancům a zahrnuje tento ID v odpovědi.

```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 });
```
