Coroutine与纤维差异澄清

时间:2017-03-23 17:33:12

标签: coroutine fiber

在书#include <stdio.h> int main() { int arr[] = {4, 2, 3}; int *p[3]; int i = 0; p[0] = arr; for (int i = 0; i < 3; i ++) printf("%d\n",*(p[0] + i) ); return 0; } 中,协同程序和光纤之间的区别解释如下:

  

协程和光纤提供的执行单元甚至比线程更轻(前者是编程语言构造时的名称,后者是系统构造时)。

我有一些Coroutines(语言结构)的例子,但无法找到Fibers的例子。

有人能为我提供一些光纤(系统结构)的例子吗?

1 个答案:

答案 0 :(得分:15)

您可以查看boost.coroutine2boost.fiber(C ++库) - 两者都使用callcc()/continuation中相同的上下文切换机制(boost.context)。

简而言之 - 协同程序和光纤之间的区别在于,光纤之间的上下文切换由调度程序管理(选择下一根光纤......)。协同程序没有调度程序的概念。

可以在N4024: Distinguishing coroutines and fibers中阅读协程和光纤之间差异的更详细说明。