Skip to content

feat(config): настраиваемый размер пула потоков#3367

Merged
bylins merged 6 commits into
masterfrom
feat/thread-pools-config
May 30, 2026
Merged

feat(config): настраиваемый размер пула потоков#3367
bylins merged 6 commits into
masterfrom
feat/thread-pools-config

Conversation

@bylins
Copy link
Copy Markdown
Owner

@bylins bylins commented May 30, 2026

Описание

Новый параметр <thread_pools><workers>N</workers></thread_pools> в configuration.xml задаёт число рабочих потоков для фоновых задач ввода-вывода.

Сейчас используется в ChestSaver и IngrChestSaver (сохранение клановых сундуков). По мере добавления новых пулов потоков — единая точка конфигурации.

Использование

<!-- в configuration.xml -->
<thread_pools><workers>4</workers></thread_pools>

Или переменная окружения (без пересборки):

MUD_WORKERS=4 ./circle 4000

Значение 0 (по умолчанию) = hardware_concurrency() / 2.

Изменения

  • RuntimeConfiguration::thread_pools_workers() — новый геттер
  • RuntimeConfiguration::load_thread_pools_configuration() — читает XML + env
  • ChestSaver::Impl, IngrChestSaver::Impl — используют конфиг вместо хардкода

🤖 Generated with Claude Code

bylins and others added 6 commits May 30, 2026 09:26
SaveChestAll() синхронно писал в файл все сундуки каждый цикл — 35мс на
пульс. Добавлен ChestSaver по образцу IngrChestSaver:
- mark_dirty() в PutChest, TakeChest, ChestUpdate (пурж при нулевом счёте)
- run() сохраняет только изменённые сундуки в параллельном пуле потоков
- LPT-сортировка по chest_objcount для минимального wall time

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
hardware_concurrency() возвращает логические ядра включая гипертрединг.
При CPU-bound сериализации HT-потоки делят ALU одного физического ядра
и дают ~10-15% прироста, а поскольку run() ждёт завершения всех потоков,
wall time определяется самым медленным. Делим на 2 для физических ядер.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Параметр chest_saver_threads в configuration.xml (или переменная
окружения CHEST_SAVER_THREADS) задаёт число потоков для ChestSaver
и IngrChestSaver. Значение 0 (по умолчанию) = hardware_concurrency()/2
(физические ядра без гипертрединга).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…_saver

Предыдущий коммит сломал кодировку файла (Edit tool конвертировал KOI8-R
в UTF-8). Файл восстановлен из HEAD~1, новая секция chest_saver добавлена
через бинарную замену без перекодировки.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
… PR)

Настраиваемое число потоков выносится в отдельный более общий параметр
thread_pools/workers. В этой ветке оставляем только перф-оптимизацию
с фиксированным hardware_concurrency()/2.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…rkers

Новый параметр thread_pools/workers в configuration.xml задаёт число
рабочих потоков для фоновых задач (сейчас: сохранение клановых сундуков).
Значение 0 (по умолчанию) = hardware_concurrency()/2.
Переопределить без пересборки: MUD_WORKERS=N.

ChestSaver и IngrChestSaver читают runtime_config.thread_pools_workers().

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@bylins bylins merged commit 3ca7651 into master May 30, 2026
20 checks passed
@bylins bylins deleted the feat/thread-pools-config branch May 30, 2026 08:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant