`
star65225692
  • 浏览: 268902 次
  • 性别: 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。

分享到:
评论

相关推荐

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

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

    IKVM最新版.rar

    IKVM可以打包jar为dll,给C#开发调用,一个很强大的转换工具

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

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

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

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

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

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

    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:Mono-connect API的项目实现

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

    Mono.Security.dll

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

    mono:Mono docker基本映像

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

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

    Mono.Cecil.Samples:Mono.Cecil.Samples

    Mono.Cecil.Samples Mono.Cecil.Samples

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

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

    mono-unity:Mono的Unity扩展

    一元一体 Mono的Unity扩展

    mono-react:Mono-repo React应用

    在Shell中添加临时环境变量 在.env添加开发环境变量 我可以使用装饰器吗? 使用AJAX请求获取数据 与API后端集成 节点 Ruby on Rails 在开发中代理API请求 配置代理后出现“无效的主机头”错误 手动配置代理 配置...

    notifications:Mono的通知模块

    通知Mono 的通知模块。变更日志v0.3.0 将模块转移到新的 jxMono 组织更新绑定到v0.4.0 ,事件到v0.4.0v0.2.1 更新到绑定v0.3.1v0.2.0 更新了 depsv0.1.1 升级到 Events v0.1.8和 Bind v0.2.1v0.1.0 初始版本

    Mono.Data.Sqlite:Mono.Data.Sqlite 用于受限系统,例如 SilverlightWindows PhoneWinRT

    我已经直接从 Mono master 复制了 Mono.Data.Sqlite、System.Data 和 System.Transactions 中的代码。 这些更改主要是成员/类型删除 它目前针对 csharp-sqlite 头构建,其中“SQLITE_ENABLE_COLUMN_METADATA”构建...

    docker的mono镜像

    在docker的mono镜像中加入一些基本命令包,方便开发(公司内网有些不能下)。有需求的直接下载,同时不需要再到仓库龟速下载了。送上安装命令: docker load -i mono.tar

    Mono.ASP.net.vNext:Mono.ASP.net.vNext playgorund

    Mono.ASP.net.vNext Mono.ASP.net.vNext playgorund链接参考ASP.net vnext地点视窗 %USERPROFILE%\.kre%USERPROFILE%\.kpmKRE_HOME=C:\Program Files\KRE;%USERPROFILE%\.kreMac + Linux ~/.kre~/.kpm日志2014-...

    website:Mono的网站

    Mono Project网站 该存储库包含用于生成的文件。 该站点使用静态站点生成器 。 托管该站点的GitHub Pages本身就支持Jekyll,因此每当有人将其推送到该存储库时,便会构建和更新该网站。 要自己托管它,请参阅。贡献...

Global site tag (gtag.js) - Google Analytics