`
star65225692
  • 浏览: 273339 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类

超越标准:Mono中的Continuation

阅读更多

虽然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和多任务共享单独的一个物理线程。星际争霸2的1.4.11更新引入终极大师联赛


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

分享到:
评论

相关推荐

    sdb:Mono软调试器的命令行客户端

    SDB:Mono Soft Debugger客户端 SDB是Mono的软调试器的命令行客户端,Mono的软调试器是... 您也可以从build目录中运行SDB,方法是将其附加到PATH并调用sdb-dev 。 这主要是为了开发SDB本身。 一个例子: $ export PAT

    iPhone高级编程:使用Mono Touch和.NET/C# 高清 pdf

    《iPhone高级编程:使用Mono Touch和.NET/C#》从基本的概念入手,全面地介绍了基于monotouch使用C#/.net进行iphone应用程序开发。从monotouch和.net开发环境到objective-c和c#开发语言,从基于monotouch进行iphone...

    mono2.4源码,了解.net

    1. **C#编译器(mcs)**:Mono中的C#编译器负责将C#源代码转换成中间语言(IL),这是.NET执行环境可以理解的语言。通过查看源码,你可以了解C#语法是如何被解析和转化为IL指令的,这对于深入理解C#语言的内部工作...

    mono介绍

    1. C# 编译器:这是一个符合ECMA标准的C#语言编译器,能够将C#源代码转换为中间语言(IL),这是.NET框架中所有语言编译后的通用表示形式。 2. 公共语言运行时(CLR):这是.NET Framework的虚拟机,负责执行IL代码...

    Mono.Cecil.Samples:Mono.Cecil.Samples

    通过深入研究Mono.Cecil.Samples项目中的代码,开发者可以学到如何在实际项目中应用Mono.Cecil,提高代码的灵活性和可维护性。无论是进行自动化测试、代码分析、插件开发还是其他高级任务,Mono.Cecil都是一个不可或...

    ManyConsole:Mono.Options的扩展,用于使用多个命令编写控制台应用程序

    ManyConsole 在Nuget上可用: ://nuget.org/List/Packages/ManyConsole 感谢DanielGonzález提供了一些其他文档: : Mono.Options(以前称为NDesk.Options)是用于处理命令行参数的出色库。 ManyConsole扩展了Mono....

    IKVM最新版.rar

    这个工具允许.NET开发者利用Java库,将它们转换为.NET组件,进而可以在C#等.NET语言中直接调用。IKVM的核心功能在于其独特的技术,它可以将Java字节码转换为.NET IL(中间语言),实现了Java与.NET之间的互操作性。 ...

    mono-unity:Mono的Unity扩展

    在“mono-unity-unity-trunk”这个压缩包中,可能包含了Unity与Mono集成的源代码仓库,这通常是开发者为了深入了解Unity内部工作原理,或者定制特定功能时会使用的资源。通过研究这些源代码,开发者可以学习到如何更...

    mono:Mono开源ECMA CLI,C#和.NET实现

    它是Microsoft .NET Framework的开源实现,基于C#的ECMA标准和公共语言运行时。 Mono项目是一部分 加入我们的#monovm频道的中: 内容 建立状态 操作系统 建筑 状态 Debian 9 amd64 Debian 9 i386 Debian 9 ...

    coding:Mono库,用于编码示例

    【编码与Mono库:在Java环境中的应用】 Mono库,源于.NET Framework的开源实现,主要在C#和其它.NET语言中使用。然而,这个标题提到的"coding:Mono库,用于编码示例"可能是在讨论如何在Java环境中利用Mono库进行...

    events:Mono 事件扩展模块

    用法在其配置中需要 Mono 事件支持的模块需要: 将此模块作为依赖项添加到其mono.json描述符( )中: { … " dependencies " : [ … " github/jillix/events/v0.1.1 " , … ], …} 在他们的客户端脚本中需要这个...

    SoapHttpClientBridge:Mono 中的 WebServices 的修复,它劫持了 Web 调用以使用 HttpClient 而不是默认的 WebRequest

    SoapHttpClient 修复了 MONO 上的 SoapHttpClientProtocol 问候 Xamarin 开发人员,这个小项目旨在在使用代理继承自 SoapHttpClientProtocol 的 Web 服务时修复 Mono 上的 TLS 问题。 简要历史:看起来 mono 没有...

    Mono.Data.Sqlite

    Mono.Data.Sqlite提供了.NET应用程序访问SQLite数据库的接口,使得开发者能够在C#、VB.NET或其他.NET语言中轻松地进行数据库操作。 Mono.Data.Sqlite的核心特性包括: 1. ADO.NET支持:它实现了.NET Framework的...

    mono:Mono-connect API的项目实现

    项目#sweet-loans 是一个简单的Web应用程序,它允许用户连接其财务帐户,查看其信息,交易,余额以及获取其财务帐户中发生的实时数据。 它是用NodeJS Express构建的,它基本上实现了Mono-Connect 的核心功能。 演练...

    Mono.Security.dll

    用C#连接postGre的两个provider:Mono.Security.dll

    xwt-mobile:Mono.Xwt 的 Android 后端

    "Xwt-mobile:Mono.Xwt 的 Android 后端"是一个专为C#开发者设计的项目,旨在为Android平台提供一个跨平台的用户界面(UI)工具包。Mono.Xwt是Xwt的一个实现,它允许开发者使用一套统一的API在多个操作系统上创建图形...

    mono:Mono docker基本映像

    docker-mono-aspnetvnext:Mono 和 ASP.NET vNext 的 Docker 镜像

    mono-aspnetvnext Docker 镜像 GitHub 存储库托管用于在创建映像的 Dockerfile。 不要克隆库,只需按照以下 该图像包含在 Mono 上使用 ASP.NET vNext 项目所需的一切。 要求 码头工人: : 运行 Docker 镜像 要运行...

    mono-core-4.2.4-7.el7.x86_64.rpm

    mono-core-4.2.4-7.el7.x86_64.rpm

Global site tag (gtag.js) - Google Analytics