> For the complete documentation index, see [llms.txt](https://evlko.gitbook.io/machinations/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://evlko.gitbook.io/machinations/advanced/gates/sortirovochnye-vorota.md).

# Сортировочные ворота

{% hint style="success" %}
Сортировочные ворота перераспределяет ресурсы, не собирая их.&#x20;

Сортировочные ворота имеют в качестве выходов **соединения с ресурсами**.
{% endhint %}

В зависимости от режима **распределения ворот** и **его меток соединений** с ресурсами, он будет сортировать ресурсы, проходящие через них.

{% hint style="warning" %}
Алгоритм применяется для **каждого ресурс**а, проходящего через ворота, даже если за один временной шаг проходит более 1 ресурса.

:wrench: Например, если через ворота проходит 10 ресурсов, каждый из этих ресурсов будет перераспределен в соответствии с алгоритмом, **установленным режимом распределения ворот, типом выходных соединений и метками выходных соединений.**
{% endhint %}

Здесь представлены все типы сортировочных ворот и их ожидаемые действия.

## &#x20;1. Детерминистическая сортировка

Детерминированные ворота сортируют ресурсы в соответствии с метками на выходных соединениях с ресурсами

### 1.1 Детерминированные сортировочные ворота с соотношением.

{% hint style="success" %}
Детерминированные ворота с соединениями ресурсов в качестве входных и выходных данных, для которых метки на  выходных соединениях имеют числовые значения, которые задают соотношение для алгоритма перераспределения.
{% endhint %}

Порядок, в котором ресурсы направляются к своим целям, зависит от порядка, в котором эти цели были добавлены на диаграмму.

![](https://4292057417-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2EnOzul3IzT7VLF5dC%2F-M4ynMoKKe_vsbAcXlpy%2F-M4yr2qUUTnKp_M2mU5u%2Fimage.png?alt=media\&token=217d7b11-f327-44ed-a643-167f19401b71)

&#x20;:wrench: Вот что происходит в примере выше:

1. Алгоритм сортировки будет применяться к каждому из входящих ресурсов
2. Первые Ресурсы будут перераспределены в верхнее хранилище (то, которое мы впервые добавили на диаграмму), и они будут продолжать направляться к нему, пока не будет достигнуто соотношение. В этом случае первые 2 ресурса пойдут в сторону первого хранилища. 1 часть из 4 (1 + 3) из 8 ресурсов (1/4 из 8)&#x20;
3. Остальные ресурсы пойдут к другому хранилищу. 3 части из 4 из 8 ресурсов (3/4 из 8)

{% hint style="info" %}
Если ресурсы и соотношение не приводят к целому количеству ресурсов, алгоритм будет «выравнивать счет» в течение нескольких временных шагов.
{% endhint %}

:wrench: Вот пример:

![](https://4292057417-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M2EnOzul3IzT7VLF5dC%2F-M4ynMoKKe_vsbAcXlpy%2F-M4yzOTEh07Smn4xk-5A%2Fimage.png?alt=media\&token=1ac2463a-07f8-4fd0-9dc5-456c152a9cf4)

1. Математически перераспределение 10 ресурсов составило бы 10\*1/4 (2.5) ресурсов для первого хранилища и 10 \*3/4 (7.5) ресурсов для второго.&#x20;
2. Хранилища не могут собирать дробные ресурса, поэтому алгоритм отправит 3 ресурса в первое и 7 - во второе хранилища во время первого шага выполнения.&#x20;
3. На следующем временном шаге он отправит 2 ресурса к 1-му хранилищу и 8 к второму&#x20;
4. В конце временного шага 2 результатом будет 20 ресурсов, идеально распределенных между двумя пулами, в соответствии с их соотношением
