architecture
description: 'Всеобъемлющий обзор архитектуры ClickHouse и его столбцового дизайна' sidebar_label: 'Обзор архитектуры' sidebar_position: 50 slug: /development/architecture title: 'Обзор архитектуры'
API ConcurrencyControl
состоит из следующих функций:
- Создать распределение ресурсов для запроса:
auto slots = ConcurrencyControl::instance().allocate(1, max_threads);
. Это распределит как минимум 1 и максимумmax_threads
слот. Обратите внимание, что первый слот выделяется немедленно, но оставшиеся слоты могут быть выделены позже. Таким образом, лимит является мягким, потому что каждый запрос получит как минимум один поток. - Для каждого потока слот должен быть получен из распределения:
while (auto slot = slots->tryAcquire()) spawnThread([slot = std::move(slot)] { ... });
. - Обновить общее количество слотов:
ConcurrencyControl::setMaxConcurrency(concurrent_threads_soft_limit_num)
. Это можно сделать в рабочем режиме, без перезапуска сервера.
Этот API позволяет запросам начинать с как минимум одного потока (в условиях давления CPU) и впоследствии масштабироваться до max_threads
.