Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Coroutine

Boost , Chapter 1. Coroutine , Chapter 1. Coroutine

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Boost.Coroutine предоставляет две реализации - асимметричные и симметричные корутины.

Симметричные корутины обычно возникают в контексте параллельного программирования для представления независимых единиц исполнения. Реализации, которые производят последовательности значений, обычно используют асимметричные корутины. [5]

stackful

Каждый экземпляр корутина имеет свой собственный стек.

В отличие от корутин без стека, стековые корутины позволяют вызывать операцию приостановки из произвольных подстеков, что позволяет проводить рекурсивные операции побега и повторного входа.

move-only

Корутина только подвижна.

Если бы он был копируемым, то его стек со всеми объектами, выделенными на нем, тоже был бы скопирован. Это привело бы к неопределенному поведению, если бы некоторые из этих объектов были классами RAII (управление ресурсом по шаблону RAII). Когда первая из рутинных копий завершится (раскручивает свой стек), деструкторы класса RAII выпустят свои управляемые ресурсы. Когда вторая копия заканчивается, те же деструкторы пытаются вдвойне высвободить те же ресурсы, что приводит к неопределенному поведению.

clean-up

При корутинном разрушении ассоциированный стек будет развёрнут.

Конструктор корутина позволяет пройти кастомизированный стек-аллокатор. stack-allocator может свободно распределять стек или кэшировать его для будущего использования (для корутин, созданных позже).

segmented stack

symmetric_coroutine<>::call_type, asymmetric_coroutine<>::push_type и asymmetric_coroutine<>::pull_type поддержка сегментированных стеков (рост по требованию).

Не всегда можно точно оценить необходимый размер стека - в большинстве случаев выделяется слишком много памяти (отходы виртуального адресного пространства).

При строительстве корутин начинается с минимального (по умолчанию) размера стека. Этот минимальный размер стека является максимальным размером страницы и каноническим размером для стека сигналов (макро-SIGSTKSZ на POSIX).

На данный момент известно, что только GCC (4.7) [6] поддерживает сегментированные стека. С версией 1.54 Boost.Coroutine обеспечивает поддержку сегментированных стеков.

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

context switch

Корутин сохраняет и восстанавливает регистры в соответствии с базовым ABI на каждом переключателе контекста (используя Boost.Context).

Некоторые приложения не используют регистры с плавающей запятой и могут отключить сохранение регистров FPU по причинам производительности.

[Note] Note

Согласно конвенции вызова, регистры FPU сохраняются по умолчанию.

В системах POSIX коммутатор контекста не сохраняет маски сигналов по причинам производительности.

Переключатель контекста выполняется через symmetric_coroutine<>::call_type::operator(), asymmetric_coroutine<>::push_type::operator() и asymmetric_coroutine<>::pull_type::operator().

[Warning] Warning

Вызов symmetric_coroutine<>::call_type::operator(), asymmetric_coroutine<>::push_type::operator() и asymmetric_coroutine<>::pull_type::operator() изнутри same приводит к неопределенному поведению.

Например, приведенный ниже код приведет к неопределенному поведению:

boost::coroutines::symmetric_coroutine<void>::call_type coro(
    [&](boost::coroutines::symmetric_coroutine<void>::yield_type& yield){
        yield(coro); // yield to same symmetric_coroutine
});
coro();


[5] Мура, Ана Люсия Де и Иерусалимский, Роберто. "Возвращение к корутине". АСМ Транс. Программа. Lang. Syst., Volume 31 Issue 2, February 2009, Article No. 6


PrevUpHomeNext

Статья Coroutine раздела Chapter 1. Coroutine Chapter 1. Coroutine может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Chapter 1. Coroutine ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:46:50/0.007235050201416/0