Комментарии 17
Корутины это функции которые могут приостановить или возобновить свое выполнение при этом сохраняя свое состояние.
Получается задачи в RTOS — это корутины.
Это, что бы каждая кухарка могла программировать свой утюг. Вместо того, что бы заниматься своим прямым делом — чисткой тарелок.
Таки да! Только они со стеком.
А наличие/отсутствие стека как-то влияет на то, может или нет это нечто со стеком/без стека называться корутиной (я бы предпочёл термин сопрограмма)?
Наличие стека позволяет потоку быть вытесненным не только на самом верхнем уровне, но и в любом вложенном вызове. Более того, специальные вызовы как раз и нужны для вытеснения.
А ещё такая техника не позволяет передавать значения вызывающему коду (хотя в данном случае вызывающий код — это только планировщик) при каждом возобновлении.
А ещё такая техника не позволяет передавать значения вызывающему коду (хотя в данном случае вызывающий код — это только планировщик) при каждом возобновлении.
Корутины в C++20 асимметричные [...]
Симметричные. Вроде как в последний момент подправили:
C++ Coroutines: Understanding Symmetric Transfer
Symmetric transfer and no-op coroutines
Всё бы ничего, но от опечаток и издевательств над словосочетании изнутри глазей текут кровавые слёзы.
Круто. Но отлаживать это я не хочу.
Интересно, но недостаточно низкоуровнево.
Можно ли было сделать поддержку всех вариантов (симметричные и асимметричные, стековые и бесстековые)?
Как это соотносится с корутинами из Boost?
Можно ли было сделать поддержку всех вариантов (симметричные и асимметричные, стековые и бесстековые)?
Как это соотносится с корутинами из Boost?
У меня есть прекрасная идея статьи, которую Вы могли бы написать.
Про boost по возможности сделаю статью, т.к. сейчас переделываю взаимодействие с мотор-контроллером на корутины. Про низкоуровневый анализ пока не планировал ничего делать. В дополнение, у boost есть хороший набор примеров как это всё там соотносится.
Будет очень интересно!
Я пока еще не осознал всю мощь корутин, но вот замечание по поводу недостаточной низкоуровневости реализаци возникло из того, что разработчики стандарта выбрали конкретную модель реализации и уже завязали на нее некие классы стандартной библиотеки, а не предоставили универсальный языковой механизм вроде boost.context, с помощью которого (наверное?) можно было бы реализовывать любую модель.
Я пока еще не осознал всю мощь корутин, но вот замечание по поводу недостаточной низкоуровневости реализаци возникло из того, что разработчики стандарта выбрали конкретную модель реализации и уже завязали на нее некие классы стандартной библиотеки, а не предоставили универсальный языковой механизм вроде boost.context, с помощью которого (наверное?) можно было бы реализовывать любую модель.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Корутины в C++20. Часть 1