# Wykorzystaj wszystkie kolory CPU w trybie klastrowym

> Rozpocznij kilka procesów pracowniczych za jednym portem z opcją klastru Total.run(), i dowiedzieć się, co jest dzielone między nimi i co nie.

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

Proces Node.js używa jednego rdzenia procesora. `Total.run({ cluster: N })` uruchamia **mastera**, który tworzy `N` procesów worker, a każdy z nich uruchamia całą Twoją aplikację; system operacyjny rozdziela między nie przychodzące połączenia (`'auto'` zamiast liczby pozwala masterowi dodawać wątki wraz ze wzrostem obciążenia). Uruchamiaj go w trybie release (`release: true`, co wygenerowany skrypt startowy ustawia przez `--release`); watcher trybu debug nie jest przeznaczony dla clustra. W skrypcie startowym to jedna opcja:

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

Każdy worker to osobny proces z własną pamięcią, więc wszystko, co trzymasz w zmiennej, w `CACHE` lub w `MEMORIZE`, istnieje raz **na każdy worker** i nie jest współdzielone: dwa żądania tego samego użytkownika mogą trafić do różnych workerów. Wspólny stan trzymaj w bazie danych, magazynie plików lub usłudze komunikatów, a sesje w magazynie, który mogą czytać wszystkie workery. Zadania zaplanowane, takie jak `CRON()`, też działają w każdym workerze, więc zabezpiecz je, jeśli mają się wykonać tylko raz.

**Sprawdź, czy wszystkie workery działają.** Po wdrożeniu kilkakrotnie zażądaj adresu takiego jak `/pid/` poniżej i policz różne id: powinno ich być tyle, ilu workerów zażądano.

Każdy pracownik ma swój własny identyfikator procesowy. przykład rozpoczyna dwóch pracowników i zawiera ten identyfikat w odpowiedzi.

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