当前位置:嗨网首页>书籍在线阅读

09-协同程序

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.3.3 协同程序

协同程序(coroutines and fibers[1])提供了比线程更轻量级的执行单位(coroutines和fibers的区别在于前者是编程语言中的概念,后者是系统中的概念)。和用户级线程模型类似,协同程序也属于用户空间的范畴,但是和用户级线程模型不同的是,几乎不存在用户空间对协同程序的调度和执行的支持。相反,它们是协作式调度,支持显式放弃一个程序而去执行另一个。协同程序和子程序(普通的C/C++函数)的差别非常微小。实际上,你也可以把子程序作为特殊的协同程序。协同程序更侧重于程序流的控制,而不是并发性。

Linux本身并不支持协同程序,可能还是因为其上下文切换已经非常快,不需要比内核线程性能更好的结构。编程语言Go为Linux提供了对类似协同程序的语言级支持,称为Go-routines。协同程序支持区分编程规范和I/O模型,这是非常值得关注的,虽然这部分内容超出了本书的探讨范畴。