# Verwenden Sie alle CPU-Kore mit dem Clustermodus

> Beginnen Sie mehrere Arbeiterprozesse hinter einem Port mit der Clusteroption von Total.run(), und wissen Sie, was zwischen ihnen geteilt wird und was nicht ist.

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

Ein Node.js-Prozess nutzt einen CPU-Kern. `Total.run({ cluster: N })` startet einen **Master**, der `N` Worker-Prozesse abzweigt, die jeweils deine ganze Anwendung ausführen, und das Betriebssystem verteilt die eingehenden Verbindungen auf sie (`'auto'` statt einer Zahl lässt den Master bei steigender Last Threads hinzufügen). Führe ihn im Release-Modus aus (`release: true`, was das generierte Startskript mit `--release` setzt); der Debug-Watcher ist nicht für einen Cluster gedacht. Im Startskript ist es eine einzige Option:

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

Jeder Worker ist ein eigener Prozess mit eigenem Speicher. Alles, was du in einer Variablen, in `CACHE` oder in `MEMORIZE` hältst, existiert also einmal **pro Worker** und wird nicht geteilt: Zwei Anfragen desselben Benutzers können bei verschiedenen Workern landen. Halte gemeinsamen Zustand in einer Datenbank, einem Dateispeicher oder einem Nachrichtendienst und speichere Sessions in einem Speicher, den alle Worker lesen können. Geplante Aufgaben wie `CRON()` laufen ebenfalls in jedem Worker, sichere sie also ab, wenn sie nur einmal laufen sollen.

**Prüfen Sie, ob alle Worker laufen.** Rufen Sie nach einem Deployment mehrmals eine URL wie `/pid/` unten ab und zählen Sie die verschiedenen IDs: Es sollten so viele sein, wie Sie Worker angefordert haben.

Jeder Arbeiter hat sein eigenes Prozess-ID. Das Beispiel beginnt mit zwei Arbeitern und enthält diesen ID in der Antwort.

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