Модуль fiber
Файбер — содержит информацию о файбере.
Функция для выполнения внутри файбера.
Создать новый файбер.
Берёт файбер из кеша файберов, если тот не пуст. Может завершиться неудачей только при нехватке памяти для структуры файбера или его стека.
Созданный файбер автоматически возвращает себя в кеш файберов после завершения своей «главной» функции.
Параметры:
-
name(const char*) — строка с именем файбера -
f(fiber_func) — функция для выполнения внутри файбера
См. также: fiber_start()
Создать новый файбер с заданными атрибутами.
Может завершиться неудачей только при нехватке памяти для структуры файбера или его стека.
Созданный файбер автоматически возвращает себя в кеш файберов, если он имеет стандартный размер стека, после завершения своей «главной» функции.
Параметры:
-
name(const char*) — строка с именем файбера -
fiber_attr(const struct fiber_attr*) — контейнер атрибутов файбера -
f(fiber_func) — функция для выполнения внутри файбера
См. также: fiber_start()
Запустить выполнение созданного файбера.
Параметры:
-
callee(struct fiber*) — файбер для запуска -
...— аргументы, с которыми запускается файбер
Передать управление другому файберу и ждать до пробуждения.
См. также: fiber_wakeup()
Прервать синхронное ожидание файбера
Параметры:
f(struct fiber*) — файбер, который нужно разбудить
Отменить указанный файбер.
Отмена выполняется асинхронно. Для ожидания завершения отмены следует использовать fiber_join().
После вызова fiber_cancel() файбер может проверять или не проверять,
был ли он отменён. Если файбер не выполняет такую проверку, отменить его
невозможно.
Параметры:
f(struct fiber*) — файбер, который нужно отменить
Устарело начиная с версии 2.11.0. Разрешить или запретить немедленное пробуждение текущего файбера при его отмене.
Параметры:
-
f(struct fiber*) — файбер -
yesno(bool) — устанавливаемое состояние
Возвращает
предыдущее состояние
Сделать файбер присоединяемым (по умолчанию false).
Параметры:
-
f(struct fiber*) — файбер -
yesno(bool) — устанавливаемое состояние
Дождаться завершения файбера и передать его статус выполнения вызывающей стороне. Файбер не должен быть отсоединённым.
Параметры:
f(struct fiber*) — файбер, который нужно разбудить
До: установлен флаг FIBER_IS_JOINABLE.
См. также: fiber_set_joinable()
Усыпить текущий файбер как минимум на 's' секунд.
Параметры:
s(double) — время сна
Примечание: это точка отмены.
См. также: fiber_is_cancelled()
Проверить текущий файбер на отмену (проверка выполняется вручную).
Вернуть время начала цикла как double (дёшево).
Вернуть время начала цикла как 64-битное целое. Использует часы реального времени.
Вернуть время начала цикла как double (дёшево). Использует монотонные часы.
Вернуть время начала цикла как 64-битное целое. Использует монотонные часы.
Перепланировать файбер на конец цикла обработки событий.
Вернуть slab_cache, пригодный для использования с библиотекой
tarantool/small
Вернуть текущий файбер.
Создать новый контейнер атрибутов файбера и инициализировать его параметрами по умолчанию.
Может использоваться для создания множества файберов: соответствующие файберы не получают права владения им.
Удалить fiber_attr и освободить все выделенные ресурсы. Это безопасно
даже тогда, когда созданные с этим атрибутом файберы ещё существуют.
Параметры:
fiber_attribute(struct fiber_attr*) — контейнер атрибутов файбера
Задать размер стека файбера в контейнере атрибутов файбера.
Параметры:
-
fiber_attr(struct fiber_attr*) — контейнер атрибутов файбера -
stack_size(size_t) — размер стека для новых файберов (в байтах)
Возвращает
0 в случае успеха
Возвращает
-1 в случае неудачи (если stack_size меньше минимально
допустимого размера стека файбера)
Получить размер стека файбера из контейнера атрибутов файбера.
Параметры:
fiber_attr(struct fiber_attr*) — контейнер атрибутов файбера или NULL для значения по умолчанию
Возвращает
размер стека (в байтах)
Условная переменная: примитив синхронизации, который позволяет файберам в среде кооперативной многозадачности Tarantool отдавать управление, пока не выполнится некоторое условие.
У условных переменных файбера есть две основные операции — «ожидание» и «сигнал», — где «ожидание» приостанавливает выполнение файбера (то есть отдаёт управление) до вызова «сигнала».
В отличие от pthread_cond, fiber_cond не требует обёртывания в
мьютекс или защёлку.
Создать новую условную переменную.
Удалить условную переменную.
Примечание: поведение не определено, если есть файберы, ожидающие эту условную переменную.
Параметры:
cond(struct fiber_cond*) — условная переменная для удаления
Разбудить один (любой) из файберов, ожидающих условную переменную.
Ничего не делает, если ожидающих нет.
Параметры:
cond(struct fiber_cond*) — условная переменная
Разбудить все файберы, ожидающие условную переменную.
Ничего не делает, если ожидающих нет.
Параметры:
cond(struct fiber_cond*) — условная переменная
Приостановить выполнение текущего файбера (то есть отдать управление) до вызова 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'
Сокращение для fiber_cond_wait_timeout().