Pull to refresh

Comments 17

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


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

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

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

Articles