Size: a a a

2020 September 07

ПК

Побитый Кирпич... in pro.cxx
Nik Vzdornov
Мне казалось, что проблем будет больше из-за наличия promise механизма, или он не требует каких либо примитивов синхронизации ос внутри?
Я не эксперт в этом вопросе, но кажется, корутины и многопоточность это ортогональные понятия. Другими словами, ты можешь писать на корутинах однопоточную программу. Там никакие синхронизации не нужны
источник

m

magras in pro.cxx
Побитый Кирпич
Подозреваю, что теоретически можно развернуть, ибо это просто трансформация кода. А во что трансформация - уже ты сам реализуешь. Тут правда может быть нюанс про дин. алокации, так как в общем случае корутины аллоцируют в куче.
Есть много способов управлять тем, как корутины выделяют память:
1) Через оператор new
2) promise_type::get_return_object
3) promise_type::get_return_object_on_allocation_failure
источник

ПК

Побитый Кирпич... in pro.cxx
magras
Есть много способов управлять тем, как корутины выделяют память:
1) Через оператор new
2) promise_type::get_return_object
3) promise_type::get_return_object_on_allocation_failure
Тогда в теории это тоже не должно быть проблемой
источник

m

magras in pro.cxx
Nik Vzdornov
Мне казалось, что проблем будет больше из-за наличия promise механизма, или он не требует каких либо примитивов синхронизации ос внутри?
Нет, @top1pogromist правильно сказал: корутины это всего лишь трансформация кода. В мире асинка применять обычные примитивы синхронизации просто опасно, поэтому обычно они реализуются по другому.
источник

NV

Nik Vzdornov in pro.cxx
Побитый Кирпич
Я не эксперт в этом вопросе, но кажется, корутины и многопоточность это ортогональные понятия. Другими словами, ты можешь писать на корутинах однопоточную программу. Там никакие синхронизации не нужны
Да, спасибо, я не был уверен в этом до конца.
источник

NV

Nik Vzdornov in pro.cxx
magras
Нет, @top1pogromist правильно сказал: корутины это всего лишь трансформация кода. В мире асинка применять обычные примитивы синхронизации просто опасно, поэтому обычно они реализуются по другому.
Спасибо.
источник

VK

Valentin Kornienko in pro.cxx
Т.е. я правильно понял, что технически обновившись до свежей ветки gcc/clang можно попробовать под ARM-Cortex собраться с корутинами?
источник

ГH

Гласси Hudobin in pro.cxx
Говорят, что корутины можно сделать вокруг любого объекта Awaitable, но я видел исключительно примеры с тредпулом.
источник

ПК

Побитый Кирпич... in pro.cxx
Гласси Hudobin
Говорят, что корутины можно сделать вокруг любого объекта Awaitable, но я видел исключительно примеры с тредпулом.
Вместо тред пула - boost::asio::io_context, крутящийся в одном потоке. Вот и однопоточный асинхронный сервер на корутинах получился)
источник

m

magras in pro.cxx
Valentin Kornienko
Т.е. я правильно понял, что технически обновившись до свежей ветки gcc/clang можно попробовать под ARM-Cortex собраться с корутинами?
Наверное. Но корутины сами по себе ничего не решают. Обычно они просто являются удобным сахаром заменяющим call back hell. В общем помимо поддержки корутин компилятором нужен код, который будет их создавать и вызывать. Вроде в boost.asio добавляли поддержку корутин. Есть cppcoro, но это скорее proof of concept. Есть libunifex от fb. Но я еще не добрался до экспериментов с ними.
источник

m

magras in pro.cxx
Если нет хипа, видимо придется кастомизировать существующие реализации. Я не знаю есть ли в них поддержка такого.
источник

m

magras in pro.cxx
Ну и конечно всегда остается вариант написать все с нуля. Для понимания это отличное упражнение. Сам этим развлекаюсь. Для прода - хз.
источник

NV

Nik Vzdornov in pro.cxx
Valentin Kornienko
Т.е. я правильно понял, что технически обновившись до свежей ветки gcc/clang можно попробовать под ARM-Cortex собраться с корутинами?
У меня free rtos кое где в проде у неё достаточный аллоквтор для нужд эмбеда на мой взгляд , определяешь free, malloc через api опепационки и все твои new и delete теперь ходят в ос, в том числе и корутиновые, с синхронизацией как уже сказали выше проблем нет и не может быть в самих корутинах, так что на мой взгляд должно завестись.
источник

VK

Valentin Kornienko in pro.cxx
Nik Vzdornov
У меня free rtos кое где в проде у неё достаточный аллоквтор для нужд эмбеда на мой взгляд , определяешь free, malloc через api опепационки и все твои new и delete теперь ходят в ос, в том числе и корутиновые, с синхронизацией как уже сказали выше проблем нет и не может быть в самих корутинах, так что на мой взгляд должно завестись.
Вот в том прикол, что не хочу затаскивать FreeRTOS пока-что. Но в целом вариант с использованием его пула- имеет право на жизнь
источник

VK

Valentin Kornienko in pro.cxx
Так-то и во фриртосе есть корутины
источник

P

PRoSToC0der in pro.cxx
Valentin Kornienko
Так-то и во фриртосе есть корутины
stackful?
источник

NV

Nik Vzdornov in pro.cxx
Valentin Kornienko
Вот в том прикол, что не хочу затаскивать FreeRTOS пока-что. Но в целом вариант с использованием его пула- имеет право на жизнь
Это уже оффтоп будет, предлагаю закончить на том, что free rtos просто аллоквтор имеет из коробки, можешь сам написать, подозреваю операции на корутинах будут частыми))
источник

NV

Nik Vzdornov in pro.cxx
Valentin Kornienko
Так-то и во фриртосе есть корутины
Нуу... Это не переносимо
источник

m

magras in pro.cxx
Да, еще в этом чате обсуждались адаптеры для корутин, которые бегут поверх готового эвент лупа. Если я правильно понимаю, для этого необходимо, чтобы асинхронные операции были реализованны через callback'и. Тогда внедрить корутины сравнительно просто.
источник

AN

Alexander N in pro.cxx
Эх, наверное прикольно было бы, если можно было async/await в корутинах, работающих в евент лупе
источник