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

Модуль fiber

type fiber

Файбер — содержит информацию о файбере.

type int(*fiber_func)(va_list)

Функция для выполнения внутри файбера.

fiber *fiber_new(const char *name, fiber_func f)

Создать новый файбер.

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

Созданный файбер автоматически возвращает себя в кеш файберов после завершения своей «главной» функции.

Параметры:

  • name (const char*) — строка с именем файбера

  • f (fiber_func) — функция для выполнения внутри файбера

См. также: fiber_start()

fiber *fiber_new_ex(const char *name, const struct fiber_attr *fiber_attr, fiber_func f)

Создать новый файбер с заданными атрибутами.

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

Созданный файбер автоматически возвращает себя в кеш файберов, если он имеет стандартный размер стека, после завершения своей «главной» функции.

Параметры:

  • name (const char*) — строка с именем файбера

  • fiber_attr (const struct fiber_attr*) — контейнер атрибутов файбера

  • f (fiber_func) — функция для выполнения внутри файбера

См. также: fiber_start()

void fiber_start(struct fiber *callee, ...)

Запустить выполнение созданного файбера.

Параметры:

  • callee (struct fiber*) — файбер для запуска

  • ... — аргументы, с которыми запускается файбер

void fiber_yield(void)

Передать управление другому файберу и ждать до пробуждения.

См. также: fiber_wakeup()

void fiber_wakeup(struct fiber *f)

Прервать синхронное ожидание файбера

Параметры:

  • f (struct fiber*) — файбер, который нужно разбудить

void fiber_cancel(struct fiber *f)

Отменить указанный файбер.

Отмена выполняется асинхронно. Для ожидания завершения отмены следует использовать fiber_join().

После вызова fiber_cancel() файбер может проверять или не проверять, был ли он отменён. Если файбер не выполняет такую проверку, отменить его невозможно.

Параметры:

  • f (struct fiber*) — файбер, который нужно отменить

bool fiber_set_cancellable(bool yesno)

Устарело начиная с версии 2.11.0. Разрешить или запретить немедленное пробуждение текущего файбера при его отмене.

Параметры:

  • f (struct fiber*) — файбер

  • yesno (bool) — устанавливаемое состояние

Возвращает

предыдущее состояние

void fiber_set_joinable(struct fiber *fiber, bool yesno)

Сделать файбер присоединяемым (по умолчанию false).

Параметры:

  • f (struct fiber*) — файбер

  • yesno (bool) — устанавливаемое состояние

void fiber_join(struct fiber *f)

Дождаться завершения файбера и передать его статус выполнения вызывающей стороне. Файбер не должен быть отсоединённым.

Параметры:

  • f (struct fiber*) — файбер, который нужно разбудить

До: установлен флаг FIBER_IS_JOINABLE.

См. также: fiber_set_joinable()

void fiber_sleep(double s)

Усыпить текущий файбер как минимум на 's' секунд.

Параметры:

  • s (double) — время сна

Примечание: это точка отмены.

См. также: fiber_is_cancelled()

bool fiber_is_cancelled(void)

Проверить текущий файбер на отмену (проверка выполняется вручную).

double fiber_time(void)

Вернуть время начала цикла как double (дёшево).

int64_t fiber_time64(void)

Вернуть время начала цикла как 64-битное целое. Использует часы реального времени.

double fiber_clock(void)

Вернуть время начала цикла как double (дёшево). Использует монотонные часы.

int64_t fiber_clock64(void)

Вернуть время начала цикла как 64-битное целое. Использует монотонные часы.

void fiber_reschedule(void)

Перепланировать файбер на конец цикла обработки событий.

type slab_cache

struct slab_cache *cord_slab_cache(void)

Вернуть slab_cache, пригодный для использования с библиотекой tarantool/small

fiber *fiber_self(void)

Вернуть текущий файбер.

type fiber_attr

void fiber_attr_new(void)

Создать новый контейнер атрибутов файбера и инициализировать его параметрами по умолчанию.

Может использоваться для создания множества файберов: соответствующие файберы не получают права владения им.

void fiber_attr_delete(struct fiber_attr *fiber_attr)

Удалить fiber_attr и освободить все выделенные ресурсы. Это безопасно даже тогда, когда созданные с этим атрибутом файберы ещё существуют.

Параметры:

  • fiber_attribute (struct fiber_attr*) — контейнер атрибутов файбера

int fiber_attr_setstacksize(struct fiber_attr *fiber_attr, size_t stack_size)

Задать размер стека файбера в контейнере атрибутов файбера.

Параметры:

  • fiber_attr (struct fiber_attr*) — контейнер атрибутов файбера

  • stack_size (size_t) — размер стека для новых файберов (в байтах)

Возвращает

0 в случае успеха

Возвращает

-1 в случае неудачи (если stack_size меньше минимально допустимого размера стека файбера)

size_t fiber_attr_getstacksize(struct fiber_attr *fiber_attr)

Получить размер стека файбера из контейнера атрибутов файбера.

Параметры:

  • fiber_attr (struct fiber_attr*) — контейнер атрибутов файбера или NULL для значения по умолчанию

Возвращает

размер стека (в байтах)

type fiber_cond

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

У условных переменных файбера есть две основные операции — «ожидание» и «сигнал», — где «ожидание» приостанавливает выполнение файбера (то есть отдаёт управление) до вызова «сигнала».

В отличие от pthread_cond, fiber_cond не требует обёртывания в мьютекс или защёлку.

struct fiber_cond *fiber_cond_new(void)

Создать новую условную переменную.

void fiber_cond_delete(fiber_cond *cond)

Удалить условную переменную.

Примечание: поведение не определено, если есть файберы, ожидающие эту условную переменную.

Параметры:

  • cond (struct fiber_cond*) — условная переменная для удаления

void fiber_cond_signal(struct fiber_cond *cond);

Разбудить один (любой) из файберов, ожидающих условную переменную.

Ничего не делает, если ожидающих нет.

Параметры:

  • cond (struct fiber_cond*) — условная переменная

void fiber_cond_broadcast(struct fiber_cond *cond);

Разбудить все файберы, ожидающие условную переменную.

Ничего не делает, если ожидающих нет.

Параметры:

  • cond (struct fiber_cond*) — условная переменная

int fiber_cond_wait_timeout(struct fiber_cond *cond, double timeout)

Приостановить выполнение текущего файбера (то есть отдать управление) до вызова fiber_cond_signal().

Как и pthread_cond, fiber_cond может выдавать ложные пробуждения, вызванные явными вызовами fiber_wakeup() или fiber_cancel(). Настоятельно рекомендуется оборачивать вызовы этой функции в цикл и на каждой итерации проверять фактическое условие и fiber_is_cancelled().

Параметры:

  • cond (struct fiber_cond*) — условная переменная

  • timeout (double) — время ожидания в секундах

Возвращает

0 при вызове fiber_cond_signal() или при ложном пробуждении

Возвращает

-1 при истечении времени ожидания, при этом код ошибки устанавливается в 'TimedOut'

int fiber_cond_wait(struct fiber_cond *cond)

Сокращение для fiber_cond_wait_timeout().