Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Модель потоков

Основные потоки

Модель потоков предполагает, что запрос, получаемый Tarantool по сети, обрабатывается тремя потоками (threads) операционной системы:

  1. Сетевой поток (или потоки) на стороне сервера принимает запрос, выполняет разбор оператора, проверяет его корректность, а затем преобразует в специальную структуру — сообщение, содержащее исполняемый оператор и его параметры.

  2. Сетевой поток отправляет это сообщение в поток обработки транзакций экземпляра (поток TX) через неблокирующую шину сообщений. Lua-программы выполняются непосредственно в потоке обработки транзакций и не требуют разбора и подготовки.

    Поток TX либо использует индекс спейса для поиска и изменения кортежа, либо выполняет хранимую функцию, выполняющую операцию с данными.

  3. Выполнение операции приводит к отправке сообщения в поток упреждающей записи (WAL), используемый для фиксации транзакции, после чего файбер, выполняющий транзакцию, приостанавливается. При завершении транзакции с помощью COMMIT или ROLLBACK выполняются следующие действия:

    • Поток WAL отправляет ответное сообщение в поток TX.
    • Файбер, выполняющий транзакцию, возобновляется для обработки результата транзакции.
    • Результат выполнения файбера передаётся в сетевой поток, который возвращает результат клиенту.

Поток TX может обрабатывать множество файберов — наборов инструкций, которые могут содержать сигналы yield (передача выполнения). Поток TX выполняет все инструкции до сигнала yield, а затем переключается на выполнение инструкций другого файбера.

Передача выполнения (yields) необходима, иначе поток TX был бы навсегда заблокирован на одном и том же файбере.

Вспомогательные потоки

Также существует несколько вспомогательных потоков, обеспечивающих дополнительные возможности:

  • Для репликации Tarantool создаёт отдельный поток для каждой подключённой реплики. Этот поток читает журнал упреждающей записи и отправляет его реплике в соответствии с её позицией в журнале. Отдельные потоки необходимы, так как каждая реплика может указывать на разную позицию в журнале и работать с разной скоростью.

  • Существует пул потоков для нерегулярных асинхронных задач, таких как DNS-резолвер или fsync.

  • Существует пул потоков, который может использоваться для параллельной сортировки (и, следовательно, для распараллеливания построения индексов). Для настройки используйте параметр конфигурации memtx.sort_threads. Этот параметр задаёт количество потоков, используемых для сортировки ключей вторичных индексов при загрузке базы данных memtx.