|
|
|
|
|
|
|
浅谈 C# 中的代码协同 (Coroutine) 执行支持1 |
|
|
|
几个月前我曾大致分析过 C# 2.0 中 iterator block 机制的实现原理,《C# 2.0 中Iterators的改进与实现原理浅析》,文中简要介绍了 C# 2.0 是如何在不修改 CLR 的前提下由编译器,通过有限状态机来实现 iterator block 中 yield 关键字。 实际上,这一机制的最终目的是提供一个代码协同执行的支持机制。 以下内容为程序代码: using System.Collections.Generic; public class Tokens : IEnumerable { public IEnumerator GetEnumerator() { for(int i = 0; i yield elements[i]; } ... } foreach (string item in new Tokens()) { Console.WriteLine(item); } 在这段代码执行过程中,foreach 的循环体和 GetEnumerator 函数体实际上是在同一个线程中交替执行的。这是一种介于线程和顺序执行之间的协同执行模式,之所以称之为协同(Coroutine),是因为同时执行的多个代码块之间的调度是由逻辑隐式协同完成的。顺序执行无所谓并行性,而线程往往是由系统调度程序强制性抢先切换,相对来说Win3.x 中的独占式多任务倒是与协同模型比较类似页码:[1] [2] [3] [4] [5] [6] [7] [8] 第1页、共8页 |
|
|
|
|
设为首页 | 加入收藏 | 广告服务 | 友情链接 | 版权申明
Copyriht 2007 - 2008 © 科普之友 All right reserved |