---
metadata:
  - name: generator
    content: Diplodoc Platform v5.57.4
alternate:
  - https://3y3.dev/en/tools/docs/multithreading.md
  - https://3y3.dev/ru/tools/docs/multithreading.md
  - href: https://3y3.dev/ru/tools/docs/multithreading.md
    type: text/markdown
    title: Markdown version
  - href: https://3y3.dev/ru/llms.txt
    rel: describedby
updatedAt: '2026-09-04T08:46:13.000Z'
tags:
  - сборка
---
> **Documentation Index:** Fetch the complete configuration index at https://3y3.dev/ru/llms.txt

# Многопоточная сборка

Сборщик умеет обрабатывать страницы документации параллельно, в нескольких потоках. Это ускоряет сборку больших проектов: обработка страниц - самая долгая часть сборки и она упирается в процессор.

По умолчанию режим выключен: сборка идёт в один поток.

## Как включить {#enable}

Передайте ключ [`--jobs`](https://3y3.dev/ru/tools/docs/settings.md#jobs):

```shell script
# 4 рабочих потока
yfm build -i ./input-folder -o ./output-folder --jobs 4

# число потоков выберется автоматически: количество ядер минус один
yfm build -i ./input-folder -o ./output-folder -j
```

Значение `1` и меньше равносильно выключенному режиму: рабочие потоки не запускаются.

Сколько потоков указывать:

* на своей машине подойдёт `-j` без числа;
* в CI ориентируйтесь на число доступных агенту ядер, а не на число ядер физической машины: в контейнере с двумя ядрами восемь потоков только замедлят сборку;
* на проекте в несколько десятков страниц многопоточность может не окупиться - запуск потоков сам по себе занимает время.

## Что ускоряется, а что нет {#scope}

Параллельно выполняется обработка отдельных страниц: разбор YFM, подстановка переменных, вставки, рендеринг в конечный файл.

Последовательно, в один поток, выполняется всё остальное:

* подготовка проекта и разбор оглавлений;
* сбор поискового индекса;
* [одностраничная сборка](https://3y3.dev/ru/tools/docs/singlepage.md) и генерация PDF;
* запись манифестов, редиректов и карты файлов.

Поэтому ускорение не линейно числу потоков: на проекте с тяжёлым оглавлением и большим поисковым индексом выигрыш будет скромнее, чем на проекте из множества простых страниц.

## Расход памяти {#memory}

Каждый рабочий поток держит собственную копию данных проекта, поэтому расход памяти растёт вместе с числом потоков. Если сборка падает по нехватке памяти, уменьшите число потоков или ограничьте каждый поток ключом [`--worker-max-old-space`](https://3y3.dev/ru/tools/docs/settings.md#worker-max-old-space):

```shell script
yfm build -i ./input-folder -o ./output-folder --jobs 4 --worker-max-old-space 2048
```

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

## Ограничения {#limitations}

* **[Watch-режим](https://3y3.dev/ru/tools/docs/build.md#watch) работает в один поток.** Первая сборка может идти в несколько потоков, но после перехода в режим слежения потоки останавливаются, и пересборки выполняются последовательно.
* **Порядок записи файлов не определён.** В однопоточной сборке страницы обрабатываются в предсказуемом порядке, в многопоточной - нет. На результат сборки это не влияет, но порядок строк в логах от запуска к запуску будет разным.
* **Сторонние расширения могут быть к этому не готовы.** Расширение выполняется внутри рабочих потоков, и не всякая логика переживает такой запуск. Если после включения `--jobs` расширение перестало работать, сравните результат с однопоточной сборкой и загляните в статью [Многопоточность и хуки](https://3y3.dev/ru/dev/extensions/multithreading.md).

## Если что-то пошло не так {#troubleshooting}

Сравните сборку с `--jobs` и без него: если результаты отличаются, дело в многопоточности, и до выяснения причины режим лучше отключить.

Строка `Threads setup timed out` в логе означает, что рабочие потоки не успели запуститься за 30 секунд. Сборка при этом не падает - она молча продолжается в один поток. Обычно это признак нехватки ресурсов на машине сборки.
