[personal profile] chabapok
В С++20 появились корутины

task<int> foo(){ ... }

int t = co_await foo();


Штука удобная, а стандарт написан так, что реализацию можно подставить какую хочешь. Это удобно. Но основная проблема - говорят, что человек может одновременно держать в голове 5..6 сущностей, программист - 7..8. Для реализации движка корутин нужно около 12.

Так с наскоку разобраться, как оно там под капотом работает, тяжело. Вроде все понятно, начинаешь делать - начинаются странности. При помощи ютуб - более-мене реально, но тоже сложно.

Я попытался сделать asyc/await движок с qt-шной очередью событий. (знаю про qcoro, но мне хочется понять, как оно сделано. А еще в qcoro нет await_all/await_first, и некоторые другие вещи не поддержаны). За 1 вечер нормально движок не сделать.

Date: 2025-02-23 08:04 pm (UTC)
vak: (Default)
From: [personal profile] vak
Корутины полезная фича. Интересно, что изобрели их в 60-е, а потом надолго забыли. Но понять интерфейс к ним - голову сломать можно. Я сбацал симулятор на корутинах - очень эффективно выходит.

https://vak.dreamwidth.org/756289.html
https://vak.dreamwidth.org/756930.html
https://vak.dreamwidth.org/757005.html
https://vak.dreamwidth.org/757609.html

Date: 2025-02-23 08:09 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Я когда-то очень давно имплементировал эту хрень для фортрана, попробовал использовать - и забил нах, навсегда. Нездоровая вещь.

Date: 2025-02-23 08:47 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
И эти потоки будут вызывать мой код в процессе? (Это то, что называлось корутинами (а также копрограммами) в древние времена.)

Date: 2025-02-24 09:19 am (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
"эти" - это потоки, которым мы что-то передали.
Так ещё два вопроса. Передаём ли мы callback (тогда всё в порядке), или та корутина знает мои точки входа (тогда бардак, чисто с топологических соображений). Вот этот второй вариант и привёл меня когда-то к выводу, что лучше не надо.

Погуглил на вики. Да, я сильно против. Топология получается хреновая. Если что сломалось, то дыру не найти, вообще говоря.

Date: 2025-02-24 11:43 am (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
А, ну так всё-таки обычные корутины. Если вынести на уровень микросервисов, то сервис А посылает что-то в точку сервиса Б, тот, подумав, посылает что-то в другую точку сервиса А - ну или с большим количеством участников.

Получаются обычные spaghetti. Которые нельзя алфавитно-топологически отсортировать. В которых может произойти бага, которую и теоретически невозможно локализовать. Это будет бюрократия, где не найти концов. (У нас в конторе примерно такая хрень, но у нас у разных групп сервисов репутации очень разные, и всегда можно свалить на "тех идиотов".)

Date: 2025-02-24 01:47 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Ну, так-то всё норм; "скачать" не собирается разговаривать с тем процессом, который её позвал, пиная там что-нибудь, что он знает, что надо пинать. Я вижу тут иерархию; ну распаралеллена, и чо. Нормально.

Date: 2025-02-24 02:53 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
С генераторами понятно; в любом случае вызванный процесс сохраняет состояние, для данного клиента, ну и. Kind of against the restful ideology, but it's ok.

Still, it's all pretty innocent. Not the kind of coroutines I knew, where entities call each other with no control regarding who can call whom (and why).

Date: 2025-02-24 01:39 am (UTC)
lxe: (Default)
From: [personal profile] lxe
Почему двенадцать, каких двенадцать? Меняется местами стек, that's it. OS это постоянно делает прозрачным для пользователя образом.

Date: 2025-02-24 09:12 am (UTC)
lxe: (Default)
From: [personal profile] lxe
Пчаль. Я думал, на файбрах сделали, а теперь есть два механизма с нетривиальным взаимодействием.

Date: 2025-02-24 11:21 am (UTC)
rampitec: (Default)
From: [personal profile] rampitec
Вот у тебя там много умных комментеров. Это отлично! Как человек, который не первое десятилетие пишет компилер под SIMT, я тебе говорю: у меня мозг в клочья. Все что что ты хлотел спросить про шизфорению и боялся спросить. Это мой индастри стандарт. А корутины тут детский сад.

June 2025

S M T W T F S
1 23 456 7
891011121314
15161718192021
22232425262728
2930     

Style Credit

Expand Cut Tags

No cut tags