今天,我在互联网上阅读了几篇有关纤维,协程和绿色线程的文章,看来这些概念有很多共通之处,但还是存在细微的差异,尤其是当我们谈论纤维和协程时。
是否有一个简洁,正确的摘要来使它们彼此不同?
更新:我发现区分协程和纤维(N4024 C ++草案)文档特别擅长区分纤维和协程。
今天,我在互联网上阅读了几篇有关纤维,协程和绿色线程的文章,看来这些概念有很多共通之处,但还是存在细微的差异,尤其是当我们谈论纤维和协程时。
是否有一个简洁,正确的摘要来使它们彼此不同?
更新:我发现区分协程和纤维(N4024 C ++草案)文档特别擅长区分纤维和协程。
Answers:
一个光纤是使用合作多任务,而不是抢占式多任务的轻量级线程。运行中的光纤必须明确地“屈服”以允许另一根光纤运行,这使其实现比内核或用户线程容易得多。
甲协程是概括的子程序,以允许悬浮和在某些位置恢复执行多个入口点的成分。与子例程不同,协程可以通过调用其他协程来退出,这些协程以后可能会返回到它们在原始协程中被调用的位置。
甲绿色线程是由虚拟机(VM),而不是本地调度由底层操作系统的线程。绿色线程在不依赖任何本机OS功能的情况下模拟多线程环境,并且它们在用户空间而不是内核空间中进行管理,从而使它们可以在不具有本机线程支持的环境中工作。