所以我和一个同事聊起了fibers,并找到了这篇2003年的论文,其中描述了使用Fiber API在C#中实现协程。
这篇论文中Yield
的实现是针对.NET 1.1的,因此它早于.NET 2.0中出现的yield return
语法。
乍一看,这里的实现显然可能更快,并且可以很好地扩展到多个CPU。
有人用过吗?
所以我和一个同事聊起了fibers,并找到了这篇2003年的论文,其中描述了使用Fiber API在C#中实现协程。
这篇论文中Yield
的实现是针对.NET 1.1的,因此它早于.NET 2.0中出现的yield return
语法。
乍一看,这里的实现显然可能更快,并且可以很好地扩展到多个CPU。
有人用过吗?
我没有使用过它,但我对这个主题很感兴趣。这是C#中一种不错的协程实现,采用轮询调度程序:http://www.bluebytesoftware.com/blog/PermaLink.aspx?guid=71235c5a-3753-4bab-bdb0-334ab439afaf
顺便说一下,引用wikipedia的话,“纤程描述的本质上与协程相同”。据我所知,在C#中最接近协程(或纤程)的东西是迭代器。实际上,它们与协程非常相似。Lippert发布了关于迭代器的几个注意点。希望它们都不会对您需要的目的造成严重问题。
一开始,协程就引起了我的注意...几天前,我正在寻找用于并行AsyncWCF方法调用的工作流解决方案,我发现真的很有趣:
http://csharperimage.jeremylikness.com/2010/03/sequential-asynchronous-workflows-in.html
这篇文章展示了在使用异步模式的 Silverlight 应用程序中创建/管理工作流的非常好的协程使用方法。
我不知道它与迭代器相比的速度如何,但对我来说,它就像是子程序的高级形式,可以在任务关键时刻提供非常有帮助的功能,而普通子程序无法为您提供并行执行任务的便利。