Как стать автором
Обновить

Комментарии 17

Корутины это функции которые могут приостановить или возобновить свое выполнение при этом сохраняя свое состояние.


Получается задачи в RTOS — это корутины.
Это, что бы каждая кухарка могла программировать свой утюг. Вместо того, что бы заниматься своим прямым делом — чисткой тарелок.
Каждая кухарка уже может писать комментарии к статьям, даже не владея языком, на котором пишет — почему бы ей же не программировать свой утюг (кстати, зачем кухарке утюг?), не владея навыками программирования?
А наличие/отсутствие стека как-то влияет на то, может или нет это нечто со стеком/без стека называться корутиной (я бы предпочёл термин сопрограмма)?
Наличие стека позволяет потоку быть вытесненным не только на самом верхнем уровне, но и в любом вложенном вызове. Более того, специальные вызовы как раз и нужны для вытеснения.
А ещё такая техника не позволяет передавать значения вызывающему коду (хотя в данном случае вызывающий код — это только планировщик) при каждом возобновлении.
Поправил в статье и сделал отсылку на данное замечание.
Всё бы ничего, но от опечаток и издевательств над словосочетании изнутри глазей текут кровавые слёзы.
Прошу прощения. Впредь буду больше времени уделять ревью.
Круто. Но отлаживать это я не хочу.

Вряд ли отладка сопрограмм будет сложнее отладки лапши из обратных вызовов.

Интересно, но недостаточно низкоуровнево.
Можно ли было сделать поддержку всех вариантов (симметричные и асимметричные, стековые и бесстековые)?
Как это соотносится с корутинами из Boost?
У меня есть прекрасная идея статьи, которую Вы могли бы написать.
Про boost по возможности сделаю статью, т.к. сейчас переделываю взаимодействие с мотор-контроллером на корутины. Про низкоуровневый анализ пока не планировал ничего делать. В дополнение, у boost есть хороший набор примеров как это всё там соотносится.
Будет очень интересно!
Я пока еще не осознал всю мощь корутин, но вот замечание по поводу недостаточной низкоуровневости реализаци возникло из того, что разработчики стандарта выбрали конкретную модель реализации и уже завязали на нее некие классы стандартной библиотеки, а не предоставили универсальный языковой механизм вроде boost.context, с помощью которого (наверное?) можно было бы реализовывать любую модель.
У меня после прочтения Райнера Гримма остался ряд вопросов по теме и позже я наткнулся на лекции МФТИ по корутинам. Я оставил ссылку в комментариях ко второй части перевода. И, как мне показалось, там лектор лучше раскрывает тему. Рекомендую посмотреть.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории