while(cur >= 0) { std::cout << cur << std::endl; SwitchToFiber(fiberFor); } DeleteFiber(fiberFor); 上述伪代码是纤程使用的一个大概流程,可以看出实际上纤程跟上面 Ruby 和 C# 2.0 中的协同执行所需功能是非常符合的。而在实现上,纤程实际上是通过在同一线程堆栈中构造出不同的区域(ConvertThreadToFiber/CreateFiber),在 SwitchToFiber 函数中切换到指定区域,以此区域(纤程)的代码和寄存器等环境执行,有点类似于 C 代码库中 longjmp 的概念。Netscape 提供的状态线程库 State Threads library 就是通过 longjmp 等机制模拟的类似功能。 而在 .NET 1.0/1.1 中要使用纤程,则还需要考虑对每个纤程的 Managed 环境构造,以及切换调度时的状态管理等等。有兴趣的朋友可以仔细阅读上述两篇精彩文章。 以下内容为程序代码: class CorIter : Fiber { protected o
数据载入中...
页码:[1] [2] [3] [4] [5] [6] [7] [8] 第8页、共8页 |