Версия:

Модуль fiber

Модуль fiber

struct fiber

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

typedef int (*fiber_func)(va_list)

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

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

Создание нового файбера.

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

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

Параметры:
  • char* name (const) – строка с именем файбера
  • f (fiber_func) – функция для выполнения в файбере

См. также fiber_start()

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

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

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

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

Параметры:
  • char* name (const) – строка с именем файбера
  • struct fiber_attr* fiber_attr (const) – контейнер с атрибутами файбера
  • f (fiber_func) – функция для выполнения в файбере

См. также fiber_start()

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

Запуск созданного файбера.

Параметры:
  • fiber* callee (struct) – запускаемый файбер
  • ... – аргументы для запуска файбера
void fiber_yield(void)

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

См. также fiber_wakeup()

void fiber_wakeup(struct fiber *f)

Прерывание синхронного ожидания файбера

Параметры:
  • fiber* f (struct) – пробуждаемый файбер
void fiber_cancel(struct fiber *f)

Отмена файбера (установка флага FIBER_IS_CANCELLED)

Если на нужном файбере установлен фалг FIBER_IS_CANCELLABLE, он пробудится (возможно досрочно). Тогда текущий файбер передает управление до тех пор, пока нужный файбер не будет удален (или пробудится с помощью fiber_wakeup()).

Параметры:
  • fiber* f (struct) – отменяемый файбер
bool fiber_set_cancellable(bool yesno)

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

Параметры:
  • fiber* f (struct) – файбер
  • yesno (bool) – назначаемый статус
Результат:

предыдущий статус

void fiber_set_joinable(struct fiber *fiber, bool yesno)

Определение файбера как присоединяемого (по умолчанию false)

Параметры:
  • fiber* f (struct) – файбер
  • yesno (bool) – назначаемый статус
void fiber_join(struct fiber *f)

Ожидание удаления файбера, а затем передача статуса его выполнения вызывающему клиенту. Файбер не должен быть открепленным.

Параметры:
  • fiber* f (struct) – пробуждаемый файбер

Ранее: установлен флаг 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)

Сообщение времени начала цикла в виде числа двойной точности.

uint64_t fiber_time64(void)

Сообщение времени начала цикла в виде 64-битного целого числа.

void fiber_reschedule(void)

Перенос файбера для завершения событийного цикла.

struct slab_cache
struct slab_cache *cord_slab_cache(void)

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

struct fiber *fiber_self(void)

Возврат текущего файбера.

struct fiber_attr
void fiber_attr_new(void)

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

Можно использовать для создания множества файберов: смена владельца не произойдет.

void fiber_attr_delete(struct fiber_attr *fiber_attr)

Удаление fiber_attr и освобождение всех выделенных ресурсов. Используется, когда есть файберы, созданные с данным атрибутом.

Параметры:
  • fiber_attr* fiber_attribute (struct) – контейнер с атрибутами файбера
int fiber_attr_setstacksize(struct fiber_attr *fiber_attr, size_t stack_size)

Определение размера стека файбера в контейнере с атрибутами файбера.

Параметры:
  • fiber_attr* fiber_attr (struct) – контейнер с атрибутами файбера
  • stack_size (size_t) – размер стека для новых файберов (в байтах)
Результат:

0, если выполнено

Результат:

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

size_t fiber_attr_getstacksize(struct fiber_attr *fiber_attr)

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

Параметры:
  • fiber_attr* fiber_attr (struct) – контейнер с атрибутами файбера или NULL, по умолчанию
Результат:

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

struct fiber_cond

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

Условия работы файбера поддерживают две основные операции – «wait» (ожидание) и «signal» (сигнал), – где «wait» откладывает выполнение файбера (то есть передает управление) до тех пор, пока не будет вызван «signal».

В отличие от pthread_cond, fiber_cond не требует функции-обертки в виде мьютекса или защелки.

struct fiber_cond *fiber_cond_new(void)

Создание новой условной переменной.

void fiber_cond_delete(struct fiber_cond *cond)

Удаление условной переменной.

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

Параметры:
  • fiber_cond* cond (struct) – удаляемая условная переменная
void fiber_cond_signal(struct fiber_cond *cond);

Пробуждение одного (любого) файбера, ожидающего условной переменной.

Не делает ничего, если нет ожидающих файберов.

Параметры:
  • fiber_cond* cond (struct) – условная переменная
void fiber_cond_broadcast(struct fiber_cond *cond);

Пробуждение всех файберов, ожидающих условной переменной.

Не делает ничего, если нет ожидающих файберов.

Параметры:
  • fiber_cond* cond (struct) – условная переменная
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() при каждой итерации.

Параметры:
  • fiber_cond* cond (struct) – условная переменная
  • double timeout (struct) – время ожидания в секундах
Результат:

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

Результат:

-1 в случае ожидания, и задается код ошибки „TimedOut“ (истекло время ожидания)

int fiber_cond_wait(struct fiber_cond *cond)

Ускоренный метод для fiber_cond_wait_timeout().