Module 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
-
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().