InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

超越标准:Mono中的Continuation

作者 Jonathan Allen 译者 张龙 发布于 2011年3月30日

领域
架构 & 设计,
语言 & 开发
主题
Mono ,
.NET ,
编程 ,
语言设计 ,
Continuations

虽然Mono在大多数情况下都紧跟C#和Common Language Infrastructure规范,但有时候它也会超越他们。虽然诸如SIMD支持等特性是向后兼容于.NET的,但运行时支持的continuations却是Mono所独有的。

continuation类似于冻结的线程,如果你愿意还可以称其为快照。它包含了栈帧和局部变量,但与真正的线程不同的是它无法执行。C#的yield操作符就是continuation的一种简化形式,但yield只不过是编译器所玩的一个小把戏,它会创建一个状态机而并非通用的continuation。因此大多数情况下你需要运行时的支持才行。

Tomi Valkeinen对运行时支持的研究成果就是Mono.Tasklet API。它考虑到了通用的continuations,可以捕获到栈,同时又可以在必要的情况下恢复。值得注意的是,这种形式的continuation可以捕获到引用,但却无法捕获到这些引用所指向的堆中的对象。Tomi Valkeinen在Mono.Tasklet API的基础上构建了microthreading库。它包含了轻量级的线程,可以通过continuations和多任务共享单独的一个物理线程。

方才我们说“大多数情况下”,这是因为还有另一种构建通用continuation的方式。来自LindenLabs的Jim Purbrick构建了一个continuation系统,使用CIL进行了重写而非运行时支持。相对于Valkeinen的continuation来说,这是一种重量级的构建continuation的方式。但它不仅可以序列化栈,还可以序列化堆中的对象。这样就可以在另一台服务器上恢复continuation了,这对于Second Life的可伸缩架构是至关重要的。从长远来看,LindenLabs想要将这两种技术整合起来:使用Mono Tasklets实现快速的continuations,使用自己的技术实现需要序列化的continuations。

查看英文原文:Going Beyond the Standard: Continuations in Mono

译者 张龙 热衷于编程,乐于分享,对新技术有强烈的探索欲,对Java轻量级框架有一定研究。

我也有个类似的开源项目 发表人 Shichao Liu 发表于
Re: 我也有个类似的开源项目 发表人 Shichao Liu 发表于
Re: 我也有个类似的开源项目 发表人 江天 皓月 发表于
  1. 返回顶部

    我也有个类似的开源项目

    发表人 Shichao Liu

    以前做网游的时候有过些研究,也有些成果。接下来一段时间应该要放一放了,所以希望感兴趣的朋友可以接着做下去。 项目在sourceforge上,叫Laputa。 里面大概有这么3部分,一些基础类库(随机数生成器,函数调用序列化等),快速序列化(反射然后DynamicMethod,缓存起来),一个无锁并行模型(核心项目是数据和线程的绑定,这样就不需要锁。争用可以用银行家算法对所有的微线程进行静态分析。执行起来基于无所队列,微线程执行中断,必要时序列化,传输到另外的线程中继续执行。)
    已上传的代码都是可以执行,有一定功能性的了,但还未完工,测试也还不够多。我邮件robirdliu@gmail.com

  2. 返回顶部

    Re: 我也有个类似的开源项目

    发表人 Shichao Liu

    补充一下,这个玩意很适合做巨型网游(超大世界,不分线的那种)。也有针对虚拟世界(比方说网游)设计的远程对象代理模型(客户端可以半透明调用服务器方法,半透明是指含加密和超时功能;服务器会自动收集服务器上对象的状态变化然后发送给所有在客户端或其他服务器上的观察者们;事件也被映射到客户端)。详细的也可以QQ聊聊,124486320。 再补充一下,我已经不做网游了,所以很希望这个未完工项目有人能接着搞,这个思路还是很有前景的。

  3. 返回顶部

    Re: 我也有个类似的开源项目

    发表人 江天 皓月

    牛人啊