今天我在互联网上读了几篇关于纤维、协同线和绿色线程的文章,这些概念似乎有很多共同之处,但有一些细微的差异,特别是当我们谈论纤维和协同线时。
是否有一个简洁、正确的总结,说明它们之间的不同之处?
更新:我发现N4024 C++草案区分协同线和纤维文档特别擅长区分纤维和协同线。
发布于 2014-08-22 15:12:30
纤维是一个轻量级线程,它使用协作多任务处理而不是先发制人多任务处理。运行中的光纤必须显式地“屈服”以允许另一个光纤运行,这使得它们的实现比内核或用户线程容易得多。
柯鲁丁是一个组件,它泛化子例程以允许多个入口点在特定位置挂起和恢复执行。与子例程不同的是,协同线可以通过调用其他协同线来退出,这些协同线稍后可能会返回到原始协同线中调用它们的位置。
绿色螺纹是由虚拟机(VM)调度的线程,而不是由底层操作系统自行调度的线程。绿色线程模拟多线程环境,而不依赖任何本机OS功能,它们在用户空间而不是内核空间中进行管理,使它们能够在没有本机线程支持的环境中工作。
光纤和绿色线程都依赖于单独的调度程序来选择下一个光纤或线程,但是光纤必须明确地将控制(产量)让给它的调度程序。绿色线程将一直运行,直到其调度程序中断(“抢占”)。
纤维和协同作用都涉及“屈服”,其中纤维/协同作用决定何时放弃控制--这是协同多任务处理。纤维总是屈服于它的调度器,而协同线决定着它该向谁屈服。
协同服务可以用于实现光纤,总是屈服于调度器协同。光纤可以通过允许每根光纤与调度器通信来实现协同。当光纤产生时,哪个光纤应该运行。
https://softwareengineering.stackexchange.com/questions/254140
复制相似问题