Size: a a a

2020 July 31

ПК

Побитый Кирпич... in supapro.cxx
Danya
co_await std::async(...);?)
Думаю, в с++23 когда future станут awaitable, то да. Ещё должны быть комбинаторы из коробки, но это не так критично, можно и завелосипедить
источник

ПК

Побитый Кирпич... in supapro.cxx
Как раз когда это произойдёт, проблемы с временем жизни в С++ станут актуальны как никогда
источник

ПК

Побитый Кирпич... in supapro.cxx
Надо будет либо копить futures и потом в каком нибудь деструкторе их все ждать, либо передавать всё  в корутины по значению или shared_ptr
источник

ПК

Побитый Кирпич... in supapro.cxx
Притом код будет выглядеть линейно, и можно провтыкать что передаёшь по ссылке
источник

DP

Denis Paukaev in supapro.cxx
Alexander Eremin
почему не советуешь юзать?
Как показала многолетняя практика, к сожалению, пока что свои кастомные реализации поверх std::thread гибче и лучше работают
источник

DP

Denis Paukaev in supapro.cxx
Побитый Кирпич
На винде как раз есть PPL, он же Concurrency Runtime. И там как раз есть свой тред пул, которым ты как раз не владеешь. По сути для тебя это N detach потоков
Я посмотрел, на первый взгляд у них многопоточная обработка с неявной блокировкой до окончания вычислений, т.е. тот же join просто без смерти потоков из их тредпула
источник

DP

Denis Paukaev in supapro.cxx
Сразу скажу что смотрел мало и быстро, так что мог чего то не увидеть
источник

ПК

Побитый Кирпич... in supapro.cxx
Denis Paukaev
Я посмотрел, на первый взгляд у них многопоточная обработка с неявной блокировкой до окончания вычислений, т.е. тот же join просто без смерти потоков из их тредпула
То что там есть где то join не так важно, если ты этим не управляешь. Объекты которые ты туда по ссылке зашарил уже сдохнут
источник

ПК

Побитый Кирпич... in supapro.cxx
Тут дело в самой асинхронности, которая требует синхронизаций
источник

DP

Denis Paukaev in supapro.cxx
Ну у тебя блокирующий вызов выходит пока они тебе параллельно не посчитают
источник

DP

Denis Paukaev in supapro.cxx
Это решает проблемы детачей
источник

DP

Denis Paukaev in supapro.cxx
Я общем то я бы просто сказал используйте std::jthread и собственно все
источник

ПК

Побитый Кирпич... in supapro.cxx
Denis Paukaev
Ну у тебя блокирующий вызов выходит пока они тебе параллельно не посчитают
Там есть модуль с task base parallelism:

create_task([this]()
{
   return this->some_string();
}).then([this](string result_from_prev_task)
{

});
Это неблокирующий вызов, который вызовет твои лямбды на тред пуле
источник

ПК

Побитый Кирпич... in supapro.cxx
Я про него говорил
источник

ПК

Побитый Кирпич... in supapro.cxx
Вместо then можно писать через co_await
источник

DP

Denis Paukaev in supapro.cxx
Побитый Кирпич
Там есть модуль с task base parallelism:

create_task([this]()
{
   return this->some_string();
}).then([this](string result_from_prev_task)
{

});
Это неблокирующий вызов, который вызовет твои лямбды на тред пуле
Не понятно что это решает, при завершении основного потока это все будет не понятно как работать
источник

ПК

Побитый Кирпич... in supapro.cxx
Denis Paukaev
Не понятно что это решает, при завершении основного потока это все будет не понятно как работать
Почему непонятно?
источник

DP

Denis Paukaev in supapro.cxx
И не ясно зачем пользоваться любым вариантом который подразумевает что любые вычисления почему то переживают main
источник

ПК

Побитый Кирпич... in supapro.cxx
detach же как то работают
источник

AF

Aidar Fattakhov in supapro.cxx
Побитый Кирпич
detach же как то работают
Неа, не работают(
источник