Module fiber | Tarantool
Документация на русском языке
поддерживается сообществом

Module fiber

type fiber

Fiber - contains information about a fiber.

typedef 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)

Deprecated since 2.11.0. Make it possible or not possible to wakeup the current fiber immediately when it’s cancelled.

Параметры:
  • 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)

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

int64_t fiber_time64(void)

Report loop begin time as 64-bit int. Uses real time clock.

double fiber_clock(void)

Report loop begin time as double (cheap). Uses monotonic clock.

int64_t fiber_clock64(void)

Report loop begin time as 64-bit int. Uses monotonic clock.

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

A conditional variable: a synchronization primitive that allow fibers in Tarantool’s cooperative multitasking environment to yield until some predicate is satisfied.

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

В отличие от 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().

Нашли ответ на свой вопрос?
Обратная связь