Войти
ПрограммированиеФорумОбщее

С++ корутины, начальный уровень (комментарии) (4 стр)

Страницы: 1 2 3 4
#45
18:20, 10 ноя 2022

BUzer
> чтобы использовать корутину как аналог стейт-машины

Нет. Только как функцию которая не хранит каких либо состояний, но может конечно влиять на внешнее состояние объекта в виде транзакции, по сути сейв это дождаться всех комитов и не давать больше открывать новые транзакции, ессно что транзакция не должна быть дольше одной секунды.

#46
18:29, 10 ноя 2022

gamedevfor
Если не давать создавать новые, но ждать совершения старых, то сейв будет влиять на геймплей. Условно: приказали юнитам стрелять, нажали сейв - игра будет ждать пока все наши юниты выстрелят, а противник в ответ стрелять не сможет.

#47
18:43, 10 ноя 2022

kipar
Ессно что нужно выбрать дискретность для игры и подгонять корутины уже под эту дискретность.

#48
19:39, 11 ноя 2022

ronniko
> И на 12 ядерном проце в 24 потока, как-то корутины не особо нужны и
> впечатляют.
> Это мое мнение.
По мегабайту адресного пространства на каждую и с провалом в ядро на каждое переключение контекста впечатляют достаточно сильно, чтобы задумываться об альтернативных способах имплементации параллелизма. Сопрограммы, таки, и есть эта самая альтернатива, и её профитность по сравнению с прочими альтернативами в том, что программирование под них максимально похоже на синхронное программирование под обычные потоки.

#49
(Правка: 15:39) 15:32, 13 ноя 2022

По мегабайту адресного пространства на каждую и с провалом в ядро на каждое переключение

По мегабайту адресного пространства для стека.
Память можно резервировать хоть по два гига на ядро.

С провалом в ядро на каждое переключение это еще надо постараться.

По твоему в Вулкане и Directx 12 сделали треды, что бы было больше  провалов и тормозов ? :)

#50
18:47, 13 ноя 2022

Короче, суть корутин в С++ - это ускорить std::this_thread::yield().
Я ничего не пропустил?

#51
23:06, 13 ноя 2022

Имбирная Ведьмочка
> this_thread::yield()
Там не на 100% происходит переключение потоков, так что нет.
Суть корутин в С++ - это вот тебе поддержка в компиляторе, делай с ними что захочешь и как хочешь.
Я за день добавил их поверх своего тредпула и пока все, в андроиде вроде не поддерживаются пока что.

#52
(Правка: 3:33) 3:31, 14 ноя 2022

/A\
> Я за день добавил их поверх своего тредпула
Ну то есть используешь их как ускоренный аналог std::this_thread::yield(), разве нет?

/A\
> Там не на 100% происходит переключение потоков
Я говорю про использование, а не про реализацию.
Скажем так, если взять твой код, все твои таски оставить как есть, но под капотом вместо корутин использовать настоящие потоки - всё сломается или продолжит работать как было (но, возможно, на более низкой скорости)?

#53
9:46, 14 ноя 2022

Имбирная Ведьмочка
В общем да. Корутины это тоже самое что потоки, а потоки тоже самое что однопоточное выполнение)

Страницы: 1 2 3 4
ПрограммированиеФорумОбщее