Я думаю, что сопрограмма / рутина очень полезна в случае, когда много одновременных небольших задач должны быть выполнены быстро. Текущий std::thread
не может удовлетворить требования, из-за его высокой стоимости.
Я также думаю, что сопрограмма / подпрограмма не может поддерживаться просто через библиотеку C ++, она должна быть реализована непосредственно основными функциями языка. Потому что сопрограмма / рутина имеет особую семантику, которая не имеет соответствующей концепции в текущем стандарте C ++.
При условии, что мы добавим новое ключевое слово cppgo
тогда мы можем написать код следующим образом:
void f(int n)
{
...
}
int main()
{
for (int i = 0; i < 10000; ++i)
{
cppgo f(i);
}
}
Как круто это будет!
Считается ли стандарт C ++ 1y для поддержки сопрограмм / горутин?
Есть несколько предложений, связанных с сопрограммами, но они предназначены не для C ++ 14, а для более поздней версии. Вот несколько из этих предложений:
resumable
функции и await
инструкция / выражение (?))Существуют и другие, более или менее связанные документы (посмотрите на документы, связанные с параллелизмом, и будущие, связанные с ними, и вы увидите тенденцию к разрешению сопрограмм).
Некоторые люди также обсуждают возможность иметь общий синтаксис для «разворачивания монад» (например, await
Ключевое слово предлагается в 1 ) который будет работать как для std::future
и другие типы, не связанные с параллелизмом, такие как optional
или же expected
, Такие функции позволили бы беспрепятственно применять одни и те же алгоритмы как к возобновляемым, так и не возобновляемым функциям с участием или без участия параллелизма. По крайней мере, в теории.
Вот список обсуждений, связанных с этими концепциями сопрограмм и монад, которые люди делают и критикуют эти предложения:
Других решений пока нет …