虽然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#》从基本的概念入手,全面地介绍了基于monotouch使用C#/.net进行iphone应用程序开发。从monotouch和.net开发环境到objective-c和c#开发语言,从基于monotouch进行iphone...
IKVM可以打包jar为dll,给C#开发调用,一个很强大的转换工具
ManyConsole 在Nuget上可用: ://nuget.org/List/Packages/ManyConsole 感谢DanielGonzález提供了一些其他文档: : Mono.Options(以前称为NDesk.Options)是用于处理命令行参数的出色库。 ManyConsole扩展了Mono....
它是Microsoft .NET Framework的开源实现,基于C#的ECMA标准和公共语言运行时。 Mono项目是一部分 加入我们的#monovm频道的中: 内容 建立状态 操作系统 建筑 状态 Debian 9 amd64 Debian 9 i386 Debian 9 ...
SDB:Mono Soft Debugger客户端 SDB是Mono的软调试器的命令行客户端,Mono的软调试器是... 您也可以从build目录中运行SDB,方法是将其附加到PATH并调用sdb-dev 。 这主要是为了开发SDB本身。 一个例子: $ export PAT
用法在其配置中需要 Mono 事件支持的模块需要: 将此模块作为依赖项添加到其mono.json描述符( )中: { … " dependencies " : [ … " github/jillix/events/v0.1.1 " , … ], …} 在他们的客户端脚本中需要这个...
SoapHttpClient 修复了 MONO 上的 SoapHttpClientProtocol 问候 Xamarin 开发人员,这个小项目旨在在使用代理继承自 SoapHttpClientProtocol 的 Web 服务时修复 Mono 上的 TLS 问题。 简要历史:看起来 mono 没有...
项目#sweet-loans 是一个简单的Web应用程序,它允许用户连接其财务帐户,查看其信息,交易,余额以及获取其财务帐户中发生的实时数据。 它是用NodeJS Express构建的,它基本上实现了Mono-Connect 的核心功能。 演练...
用C#连接postGre的两个provider:Mono.Security.dll
mono-aspnetvnext Docker 镜像 GitHub 存储库托管用于在创建映像的 Dockerfile。 不要克隆库,只需按照以下 该图像包含在 Mono 上使用 ASP.NET vNext 项目所需的一切。 要求 码头工人: : 运行 Docker 镜像 要运行...
Mono.Cecil.Samples Mono.Cecil.Samples
mono-core-4.2.4-7.el7.x86_64.rpm
一元一体 Mono的Unity扩展
在Shell中添加临时环境变量 在.env添加开发环境变量 我可以使用装饰器吗? 使用AJAX请求获取数据 与API后端集成 节点 Ruby on Rails 在开发中代理API请求 配置代理后出现“无效的主机头”错误 手动配置代理 配置...
通知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 master 复制了 Mono.Data.Sqlite、System.Data 和 System.Transactions 中的代码。 这些更改主要是成员/类型删除 它目前针对 csharp-sqlite 头构建,其中“SQLITE_ENABLE_COLUMN_METADATA”构建...
在docker的mono镜像中加入一些基本命令包,方便开发(公司内网有些不能下)。有需求的直接下载,同时不需要再到仓库龟速下载了。送上安装命令: docker load -i mono.tar
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-...
Mono Project网站 该存储库包含用于生成的文件。 该站点使用静态站点生成器 。 托管该站点的GitHub Pages本身就支持Jekyll,因此每当有人将其推送到该存储库时,便会构建和更新该网站。 要自己托管它,请参阅。贡献...