对于.net/c # 有没有很好的 行为者并发模型行为者并发模型实现?
我必须优化一个 c # 例程,我认为演员模型非常适合作为我的问题的解决方案。不幸的是,我只有 Scala 实现的经验。
我不知道 C # 有什么实现,但是有一种全新的编程语言是基于微软的 Actor 模型的。它叫 阿克萨姆:
Axum(以前的代号为 Maestro)是一种特定于领域的并发编程语言,基于 Actor 模型,由 Microsoft 开发。它是一种面向对象的语言,基于。NET 通用语言运行库使用类似于 C 的语法,作为一个领域特定语言,用于开发软件应用程序中适合并发的部分。但是它包含了足够多的通用结构,对于并发组件的连续部分,不需要切换到通用编程语言(比如 C #)。
Axum
Maestro
你应该看看 MS 并发和协调运行时(CCR),和 分散式软件服务(DSS),机器人工作室的一部分。
这些框架将允许您开发松散耦合的服务,以满足多数角色方法需求。
Axum 将是最合适的选择,不幸的是,它仍处于某种 alpha/beta 阶段(更新于2011年2月被终止)。我把它用于我的研究,必须说,总的方向是伟大的,它有巨大的潜力。
不是 C # 而是 C + + 是微软的 异步代理库,它提供了所有你需要的特性。
好好看看.NET 4的 平行相关的特征。
希望能有帮助!
你有没有考虑过提供 F # 的 T 邮箱处理器?
一个演员-自由的。网络。相当能干和良好的测试。基础的 TopShelf,大众运输和 NServiceBus。主机。
Https://github.com/phatboyg/stact
包含抽象概念:
接下来:
在克里斯撰写本文时正在积极开发。
开发并发应用程序需要一种有别于当前软件开发方法的方法,这种方法强调并发性和自治系统组件之间的通信。角色模型定义了一个被称为角色的软件组件系统,这些软件组件通过交换消息(而不是在面向对象设计的接口上调用方法)相互交互,生成一个系统,其中数据(而不是控制)通过组件流动以满足系统的功能需求。
中使用角色模型构建应用程序的库。NET.主程序集 Stact.dll 是角色库,包括在任何类型的应用程序中使用角色模型所需的所有内容。还有其他的支持框架,比如 Stact。ServerFramework,可用于通过套接字或 HTTP 公开参与者,允许使用参与者构建服务。
NAct 是一个.NET 的角色框架,它采用了一种非常容易使用的方法。(免责声明: 这是我写的)
在两个参与者之间传递的消息只是两个对象之间的方法调用。您必须确保所有的方法参数都是不可变的,并且它是线程安全的。
它的工作原理是将对象包装在处理线程切换的代理中。一切正常。NET 特性,特别是事件,被正确处理,所以你可以编写正常的代码和线程封送处理将自行发生。
甚至还有一个支持 C # 5异步/等待的分支。
Remact. Net 是我目前的项目,它使用 WebSockets 和 Json 来进行远程角色消息传递。 它为 C # 角色提供了类型安全性,但也支持用 Java 脚本编写的基于浏览器的角色的动态类型。
我以前的项目是 AsyncWcfLib。这是一个用于在进程中或不同应用程序之间进行通信的参与者的 C # 库。远程消息传递使用 WCF。 Actor 目录服务允许在多个主机上发现 Actor,这些主机可以运行 Windows 或 Linux
你也应该考虑 PostSharp Actors
F # 的参与者框架。
举个例子:
let rec schizoPing = (fun (actor:IActor<_>) -> let log = (actor :?> Actor.T<_>).Log let rec ping() = async { let! (msg,_) = actor.Receive() log.Info(sprintf "(%A): %A ping" actor msg, None) return! pong() } and pong() = async { let! (msg,_) = actor.Receive() log.Info(sprintf "(%A): %A pong" actor msg, None) return! ping() } ping() )
向“精神分裂”参与者发送两条消息会导致
let schizo = Actor.spawn (Actor.Options.Create("schizo")) schizoPing !!"schizo" <-- "Hello" !!"schizo" <-- "Hello"
产出:
(schizo): "Hello" ping (schizo): "Hello" pong
在 Github和 医生找到它
只是注意到这个问题,并想添加一个新的数据点。微软目前有一个半官方的项目,称为 特技演员。它是开源的,并且仍在发展中,但是值得关注..。
Https://github.com/asynkronit/protoactor-dotnet
Https://github.com/akkadotnet/akka.net
Https://github.com/dotnet/orleans
人们可能还会看到微软在演员方面所采取的方法(上周发布)
这是项目网站: Http://research.microsoft.com/en-us/projects/orleans/
这里也有一个来自 build 2014的很好的介绍
在 Azure 中使用黄金搭建 Halo 4的分布式云服务 Http://channel9.msdn.com/events/build/2014/3-641
请注意,今天发布的下载位是 CTP。
奥尔良简介: http://felixnotes.com/orleans-microsofts-take-on-the-actor-pattern-in-net/
是的,它也是开源的: https://github.com/dotnet/orleans
如前所述,F # 的 MailboxProcessor 类提供了一个简单、直接的角色模型实现。关于如何使用它的一个奇妙的介绍是可用的 给你。F # 与 C # 的互操作非常好,您可以使用发布不同消息的方法将代理包装在一个类中。对于代理将以异步响应应答的情况,请参见 回复方法。这将返回一个 Async 工作流,您可以使用 异步,启动任务方法将其转换为可在 C # 中等待的任务。
最后,如果您需要远程分发角色,我建议您查看同时提供 C # 和 F # API 的 Akka. NET。
今天微软发布了 Azure Service Fabric,它实现了一个角色编程模型:
请看声明: http://azure.microsoft.com/blog/2015/04/20/announcing-azure-service-fabric-reducing-complexity-in-a-hyper-scale-world/
更新: SDK现在已经可用,还有一个 视频教程。