# Använd alla CPU-kärnor med klusterläget

> Börja flera arbetsprocesser bakom en enda port med klusteralternativet Total.run(), och veta vad som delas mellan dem och vad som inte är.

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

En Node.js-process använder en CPU-kärna. `Total.run({ cluster: N })` startar en **master** som skapar `N` workerprocesser, var och en kör hela din applikation, och operativsystemet fördelar de inkommande anslutningarna mellan dem (`'auto'` i stället för ett tal låter mastern lägga till trådar när belastningen ökar). Kör det i releaseläge (`release: true`, som det genererade startskriptet sätter med `--release`); debug-lägets watcher är inte avsedd för ett kluster. I startskriptet är det ett enda alternativ:

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

Varje worker är en separat process med eget minne, så allt du håller i en variabel, i `CACHE` eller i `MEMORIZE` finns en gång **per worker** och delas inte: två förfrågningar från samma användare kan hamna hos olika workers. Håll delat tillstånd i en databas, i ett fillager eller i en meddelandetjänst, och lagra sessioner i ett lager som alla workers kan läsa. Schemalagda jobb som `CRON()` körs också i varje worker, så skydda dem om de bara ska köras en gång.

**Kontrollera att alla workers är uppe.** Begär efter en driftsättning en URL som `/pid/` nedan flera gånger och räkna de olika id:na: det ska vara lika många som de workers du bad om.

Varje arbetare har sin egen processid. exemplet börjar med två arbetare och inkluderar det id i svaret.

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