# Използвайте всички ЦПУ корени в режим на кластер

> Започнете няколко работни процеси зад един порт с опцията за кластер на Total.run(), и да знаете какво се споделя между тях и какво не е.

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

Един процес на Node.js използва едно ядро на процесора. `Total.run({ cluster: N })` стартира **master**, който създава `N` процеса worker, всеки от които изпълнява цялото ви приложение, а операционната система разпределя входящите връзки между тях (`'auto'` вместо число оставя master да добавя нишки, когато натоварването расте). Изпълнявайте го в режим release (`release: true`, който генерираният стартов скрипт задава с `--release`); watcher-ът на режим debug не е предназначен за cluster. В стартовия скрипт това е една опция:

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

Всеки worker е отделен процес със собствена памет, така че всичко, което държите в променлива, в `CACHE` или в `MEMORIZE`, съществува веднъж **за всеки worker** и не се споделя: две заявки на един и същ потребител може да попаднат при различни workers. Държете споделеното състояние в база данни, във файлово хранилище или в служба за съобщения, а сесиите в хранилище, което всички workers могат да четат. Планираните задачи като `CRON()` също се изпълняват във всеки worker, затова ги защитете, ако трябва да се изпълнят само веднъж.

**Проверете дали всички работници работят.** След внедряване поискайте няколко пъти адрес като `/pid/` по-долу и пребройте различните идентификатори: трябва да са толкова, колкото работници сте поискали.

Всеки работник има свой собствен процес ID. Примерът започва двама работници и включва този ID в отговора.

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