# Utilice todos los núcleos CPU con el modo de cluster

> Comienza varios procesos de trabajadores detrás de un puerto con la opción de cluster de Total.run(), y sabe lo que se comparte entre ellos y lo que no es.

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

Un proceso de Node.js usa un solo núcleo de la CPU. `Total.run({ cluster: N })` arranca un **master** que lanza `N` procesos worker, cada uno con toda tu aplicación, y el sistema operativo reparte entre ellos las conexiones entrantes (`'auto'` en lugar de un número deja que el master añada hilos según crece la carga). Ejecútalo en modo release (`release: true`, que el script de arranque generado activa con `--release`); el watcher de debug no está pensado para un cluster. En el script de arranque es una sola opción:

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

Cada worker es un proceso independiente con su propia memoria, así que lo que guardes en una variable, en `CACHE` o en `MEMORIZE` existe una vez **por worker** y no se comparte: dos peticiones del mismo usuario pueden caer en workers distintos. Guarda el estado compartido en una base de datos, en un almacén de archivos o en un servicio de mensajes, y mantén las sesiones en un almacén que todos los workers puedan leer. Las tareas programadas como `CRON()` también se ejecutan en cada worker, así que protégelas si deben ejecutarse una sola vez.

**Comprueba que todos los workers están arriba.** Tras un despliegue, solicita varias veces una URL como `/pid/` de abajo y cuenta los ids distintos: deben ser tantos como los workers que pediste.

Cada trabajador tiene su propio ID de proceso.El ejemplo comienza con dos trabajadores y incluye ese ID en la respuesta.

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