# Utilizați toate core-urile CPU cu modul de cluster

> Începeți mai multe procese ale muncitorilor din spatele unui singur port cu opțiunea de cluster a Total.run(), și știți ce este împărtășit între ele și ce nu este.

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

Un proces Node.js folosește un singur nucleu al procesorului. `Total.run({ cluster: N })` pornește un **master** care creează `N` procese worker, fiecare rulând întreaga ta aplicație, iar sistemul de operare distribuie între ele conexiunile primite (`'auto'` în loc de un număr lasă masterul să adauge fire pe măsură ce crește încărcarea). Rulează-l în modul release (`release: true`, pe care scriptul de pornire generat îl setează cu `--release`); watcherul din modul debug nu este făcut pentru un cluster. În scriptul de pornire este o singură opțiune:

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

Fiecare worker este un proces separat cu propria memorie, deci tot ce păstrezi într-o variabilă, în `CACHE` sau în `MEMORIZE` există o dată **pe worker** și nu se partajează: două cereri ale aceluiași utilizator pot ajunge la workeri diferiți. Păstrează starea comună într-o bază de date, într-un depozit de fișiere sau într-un serviciu de mesaje și ține sesiunile într-un depozit pe care îl pot citi toți workerii. Sarcinile programate precum `CRON()` rulează și ele în fiecare worker, așa că protejează-le dacă trebuie să ruleze o singură dată.

**Verifică dacă toți workerii sunt porniți.** După un deploy, cere de mai multe ori un URL ca `/pid/` de mai jos și numără id-urile distincte: trebuie să fie tot atâtea câți workeri ai cerut.

Fiecare lucrător are propriul ID de proces. exemplul începe cu doi lucrători și include acest ID în răspuns.

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