Мне казалось, что проблем будет больше из-за наличия promise механизма, или он не требует каких либо примитивов синхронизации ос внутри?
Я не эксперт в этом вопросе, но кажется, корутины и многопоточность это ортогональные понятия. Другими словами, ты можешь писать на корутинах однопоточную программу. Там никакие синхронизации не нужны
Подозреваю, что теоретически можно развернуть, ибо это просто трансформация кода. А во что трансформация - уже ты сам реализуешь. Тут правда может быть нюанс про дин. алокации, так как в общем случае корутины аллоцируют в куче.
Есть много способов управлять тем, как корутины выделяют память: 1) Через оператор new 2) promise_type::get_return_object 3) promise_type::get_return_object_on_allocation_failure
Есть много способов управлять тем, как корутины выделяют память: 1) Через оператор new 2) promise_type::get_return_object 3) promise_type::get_return_object_on_allocation_failure
Мне казалось, что проблем будет больше из-за наличия promise механизма, или он не требует каких либо примитивов синхронизации ос внутри?
Нет, @top1pogromist правильно сказал: корутины это всего лишь трансформация кода. В мире асинка применять обычные примитивы синхронизации просто опасно, поэтому обычно они реализуются по другому.
Я не эксперт в этом вопросе, но кажется, корутины и многопоточность это ортогональные понятия. Другими словами, ты можешь писать на корутинах однопоточную программу. Там никакие синхронизации не нужны
Нет, @top1pogromist правильно сказал: корутины это всего лишь трансформация кода. В мире асинка применять обычные примитивы синхронизации просто опасно, поэтому обычно они реализуются по другому.
Т.е. я правильно понял, что технически обновившись до свежей ветки gcc/clang можно попробовать под ARM-Cortex собраться с корутинами?
Наверное. Но корутины сами по себе ничего не решают. Обычно они просто являются удобным сахаром заменяющим call back hell. В общем помимо поддержки корутин компилятором нужен код, который будет их создавать и вызывать. Вроде в boost.asio добавляли поддержку корутин. Есть cppcoro, но это скорее proof of concept. Есть libunifex от fb. Но я еще не добрался до экспериментов с ними.
Т.е. я правильно понял, что технически обновившись до свежей ветки gcc/clang можно попробовать под ARM-Cortex собраться с корутинами?
У меня free rtos кое где в проде у неё достаточный аллоквтор для нужд эмбеда на мой взгляд , определяешь free, malloc через api опепационки и все твои new и delete теперь ходят в ос, в том числе и корутиновые, с синхронизацией как уже сказали выше проблем нет и не может быть в самих корутинах, так что на мой взгляд должно завестись.
У меня free rtos кое где в проде у неё достаточный аллоквтор для нужд эмбеда на мой взгляд , определяешь free, malloc через api опепационки и все твои new и delete теперь ходят в ос, в том числе и корутиновые, с синхронизацией как уже сказали выше проблем нет и не может быть в самих корутинах, так что на мой взгляд должно завестись.
Вот в том прикол, что не хочу затаскивать FreeRTOS пока-что. Но в целом вариант с использованием его пула- имеет право на жизнь
Вот в том прикол, что не хочу затаскивать FreeRTOS пока-что. Но в целом вариант с использованием его пула- имеет право на жизнь
Это уже оффтоп будет, предлагаю закончить на том, что free rtos просто аллоквтор имеет из коробки, можешь сам написать, подозреваю операции на корутинах будут частыми))
Да, еще в этом чате обсуждались адаптеры для корутин, которые бегут поверх готового эвент лупа. Если я правильно понимаю, для этого необходимо, чтобы асинхронные операции были реализованны через callback'и. Тогда внедрить корутины сравнительно просто.