协程与C ++内联函数有什么区别?

时间:2012-03-31 06:21:10

标签: coroutine

据我所知,coroutine是一系列函数调用,区别在于函数调用不会为每个调用分配堆栈(它们在它们被停止的时间点恢复),或者我们可以说这些函数是在共享堆栈。

因此协程的主要优点是执行速度。它不仅仅是C ++的内联函数吗? (当编译期间插入函数体时代替调用。)

1 个答案:

答案 0 :(得分:3)

在常用的意义上,“协同程序”基本上是一个功能 - 一旦启动 - 可以设想为与呼叫者一起运行。也就是说,当协程“收益”(一种半特殊的回报)时,它不一定完成 - 并且再次“调用”它将使协同程序在其停止的地方正常拾取,其状态完好无损而不是从头开始。因此,可以将调用视为在两个函数之间传递消息。

很少有语言可以完全和原生地做到这一点。 (基于堆栈的语言往往很难用它,没有像Windows的“光纤”那样的功能。)Ruby显然,并且Python使用它的有限版本。我相信他们称之为“生成器”,它基本上使用类似于可迭代的集合(其迭代器在运行中生成其下一个“元素”)。 C#也可以半执行(它们称之为“迭代器”),但编译器实际上将函数转换为实现各种状态机的类。