我认为coroutine / goroutine在很多并发小任务必须快速执行的情况下非常有用。由于成本高昂,目前std::thread
无法满足要求。
我还认为只能通过C ++库来支持coroutine / goroutine,它应该由语言的核心功能直接实现。因为coroutine / goroutine具有特殊的语义,在当前的C ++标准中没有相应的概念。
如果我们添加一个新的关键字cppgo
,那么我们可以按如下方式编写代码:
void f(int n)
{
...
}
int main()
{
for (int i = 0; i < 10000; ++i)
{
cppgo f(i);
}
}
会有多酷!
C ++ 1y标准是否被认为支持coroutine / goroutine?
答案 0 :(得分:8)
有几个与协同程序相关的提案,但它们并不针对C ++ 14,而是针对更高版本。以下是其中一些建议:
resumable
函数和await
指令/表达式(?))还有其他或多或少的相关论文(查看并发相关论文和未来相关论文,你会看到允许协同程序的倾向)。
有些人还讨论了为“解包monad”提供一般语法的可能性(例如1中提出的await
关键字),这对std::future
和其他非并发相关类型,如optional
或expected
。这些特征将允许将相同的算法无缝地应用于可恢复和不可恢复的功能,无论是否涉及并发。至少在理论上。
以下是人们在做和批评这些提案时与这些协程和monad概念相关的讨论列表: