# Použite všetky CPU kódy v klastrovom režime

> Začnite niekoľko pracovných procesov za jedným portom s možnosťou klastru Total.run(), a viete, čo je medzi nimi zdieľané a čo nie.

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

Proces Node.js využíva jedno jadro procesora. `Total.run({ cluster: N })` spustí **master**, ktorý vytvorí `N` worker procesov, z ktorých každý spúšťa celú vašu aplikáciu, a operačný systém medzi ne rozdeľuje prichádzajúce spojenia (`'auto'` namiesto čísla nechá master pridávať vlákna podľa rastúcej záťaže). Spúšťajte ho v režime release (`release: true`, ktorý vygenerovaný štartovací skript nastaví pomocou `--release`); watcher z režimu debug nie je určený pre cluster. V štartovacom skripte ide o jedinú možnosť:

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

Každý worker je samostatný proces s vlastnou pamäťou, takže všetko, čo uložíte do premennej, do `CACHE` alebo do `MEMORIZE`, existuje raz **pre každý worker** a nezdieľa sa: dve požiadavky toho istého používateľa môžu skončiť v rôznych workeroch. Zdieľaný stav ukladajte do databázy, do súborového úložiska alebo do služby správ a relácie držte v úložisku, ktoré môžu čítať všetky workery. Plánované úlohy ako `CRON()` sa tiež vykonávajú v každom workeri, takže ich ošetrite, ak sa majú vykonať iba raz.

**Skontrolujte, že všetci workeri bežia.** Po nasadení opakovane vyžiadajte URL ako `/pid/` nižšie a spočítajte rôzne id: malo by ich byť toľko, koľko workerov ste žiadali.

Každý zamestnanec má svoj vlastný procesný ID. Príklad začína dvoch zamestnancov a obsahuje tento ID v odpovedi.

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