Эволюция подходов к написанию корутин от Си до С++20. Часть 2. Переходим от без стековых сопрограмм к стековым

В прошлой статье был рассмотрен процесс создания без стековых сопрограмм на основе библиотеки прото потоков. При этом вся работа по хранению состояния сопрограммы и сохранению ее параметров полностью ложится на плечи программиста. В данной статье я хочу рассказать о том, как можно автоматизировать выполнение этих задач при помощи стековых корутин, рассмотрю 3 способа передачи управления от одной сопрограммы к другой, и опишу с какими проблемами приходиться сталкиваться при создании стековых корутин. Продолжим писать на языке Си и добавим ассемблер. Для начала вспомним сопрограмму для вычисления чисел Фибоначчи, рассмотренную в предыдущей статье. Для её корректной все переменные, необходимые для работы алгоритма, а также состояние выполнения сопрограммы приходилось хранить в отдельной структуре, передаваемой сопрограмме в качестве параметра. Теперь я хочу избавиться от этой структуры и хранить состояние корутины при помощи локальных переменных, как это делается в обычных функциях. Функции хранят локальные переменные в стеке, следовательно, нам также нужен стек. Под обычной я подразумеваю функцию, определённую синтаксисом языка, с указанием возвращаемого типа, имени функции, а также её параметров. Однако, использовать стек как это делается в обычных функциях мы не можем из-за того, что сопрограмма должна приостанавливать свое выполнение и передавать управление вызывающему коду, а при повторном вызове продолжать свою работу. Обычная функция в Си передает управление вызывающему коду при помощи оператора return. При этом область стековой памяти, хранящая локальные переменные, больше не принадлежит функции.

https://habr.com/ru/articles/961852/

#стековая_корутина #продолжение #переключение_контекста

Эволюция подходов к написанию корутин от Си до С++20. Часть 2. Переходим от без стековых сопрограмм к стековым

В прошлой статье был рассмотрен процесс создания без стековых сопрограмм на основе библиотеки прото потоков. При этом вся работа по хранению состояния сопрограммы полностью ложится на плечи ее...

Хабр

flowOn vs withContext: правильное переключение потоков в Flow в Kotlin

Привет, Хабр! Сегодня мы рассмотрим, как правильно переключать контексты в Kotlin Flow и почему flowOn — это не то же самое, что withContext .

https://habr.com/ru/companies/otus/articles/932230/

#kotlin #Kotlin_Flow #корутины_Kotlin #flowOn #withContext #переключение_контекста #CoroutineDispatcher #DispatchersIO #DispatchersDefault

flowOn vs withContext: правильное переключение потоков в Flow в Kotlin

Привет, Хабр! Сегодня мы рассмотрим, как правильно переключать контексты в Kotlin Flow и почему flowOn  — это не то же самое, что withContext . Зачем вообще переключать контексты...

Хабр

[Перевод] Переключение между контекстами убивает эффективность разработчиков на корню

Я программист. Меня всё время отвлекают, и я хочу об этом поговорить. Вы когда-нибудь задумывались, что сильнее всего подрывает эффективность работы? Много чего. Но мы часто недооцениваем один фактор, который выделяется на фоне остальных. Каждое короткое сообщение, которое вы отправляете коллеге в Slack, отнимает у него 23 минуты продуктивной работы . И это далеко не всё. Я работаю с командами разработчиков вот уже десять лет, и мы постоянно недооцениваем вред, который нам причиняют такие отвлекающие факторы. В этой статье разбираемся, почему переключение между контекстами обходится так дорого и что с этим делать.

https://habr.com/ru/companies/netologyru/articles/890474/

#таймменеджмент #состояние_потока #отвлечение #отвлекающие_факторы #концентрация #усталость #фокусировка #переключение_контекста #поток #хороший_код

Переключение между контекстами убивает эффективность разработчиков на корню

Я программист. Меня всё время отвлекают, и я хочу об этом поговорить. Вы когда-нибудь задумывались, что сильнее всего подрывает эффективность работы? Много чего. Но мы часто недооцениваем один фактор,...

Хабр

[Перевод] Xv6: учебная Unix-подобная ОС. Глава 7. Планирование процессов

Глава расскажет, что такое мультиплексирование процессов, как xv6 переключает процессы, как xv6 синхронизирует процессы с помощью sleep и wakeup, как работает семафор, как работает канал (pipe), как случаются инверсии приоритетов и образуются конвои процессов, как правильно убить процесс и укротить грохочущее стадо процессов.

https://habr.com/ru/articles/801567/

#xv6 #семафор #переключение_контекста #мультиплексирование #условные_переменные #планировщик #sleep #wakeup #взаимоблокировки #каналы

Xv6: учебная Unix-подобная ОС. Глава 7. Планирование процессов

Предыдущая: Глава 6. Блокировки Примечание. Авторы рекомендуют читать книгу вместе с исходным текстом xv6 . Авторы подготовили и лабораторные работы по xv6 . Xv6 работает на RISC-V, поэтому для его...

Хабр