是否有适用于.NET/C#的actors并发模型的良好实现?
我需要优化一个C#例程,我认为Actor模型是解决我的问题的完美方案。不幸的是,我只有使用Scala实现的经验。
是否有适用于.NET/C#的actors并发模型的良好实现?
我需要优化一个C#例程,我认为Actor模型是解决我的问题的完美方案。不幸的是,我只有使用Scala实现的经验。
https://github.com/AsynkronIT/protoactor-dotnet
https://github.com/akkadotnet/akka.net
还可以看一下微软的行动者方法(Project Orleans),这是上周发布的。
这是该项目的网站:http://research.microsoft.com/en-us/projects/orleans/
以下是一个好的介绍,来自于2014年的建设大会:
使用Orleans在Azure中构建Halo 4分布式云服务 http://channel9.msdn.com/Events/Build/2014/3-641
请注意,作为下载的位于今天发布的CTP。
Orleans简介:http://felixnotes.com/orleans-microsofts-take-on-the-actor-pattern-in-net/
而且,它也是开源的:https://github.com/dotnet/orleans
你应该看一下MS 并发与协作运行时(CCR)以及分散式软件服务(DSS),它们是机器人工作室的一部分。
这些框架可以让您开发松耦合服务,满足大多数Actor方法的要求。
Axum可能是最合适的选择,但不幸的是它仍处于某种alpha/beta阶段(更新:它在2011年2月被取消了)。我将其用于我的研究,并且必须说整体方向很好,具有巨大潜力。
虽然不是C#而是C++,但Microsoft的异步代理库为您提供了所需的所有功能。
请仔细查看.NET 4的并行相关特性。
希望这能帮到你!
Stact是基于.Net的一个Actor库,具备很高的能力和经过充分测试。TopShelf、MassTransit和NServiceBus.Host的基础。
https://github.com/phatboyg/stact
包含以下抽象概念:
即将推出:
Chris正在编写开发中。
开发并发应用程序需要一种不同于当前软件开发方法的方法,这种方法强调自治系统组件之间的并发和通信。演员模型定义了一种称为演员的软件组件系统,这些组件通过交换消息(而不是在面向对象设计中调用接口上的方法)相互交互,产生数据流通过组件以满足系统的功能要求。
Stact是一个用于在.NET中使用演员模型构建应用程序的库。主要程序集Stact.dll是演员库,包括使用演员模型构建任何类型的应用程序所需的一切。还有其他支持框架,如Stact.ServerFramework,可用于通过套接字或HTTP公开演员,从而可以使用演员构建服务。
NAct是一个面向.NET的演员框架,采用易于使用的方法。(免责声明:我编写了它)
两个演员之间的消息传递只是两个对象之间的方法调用。您必须确保所有的方法参数都是不可变的,并且它将是线程安全的。
它通过将对象包装在处理线程切换的代理中来工作。所有正常的.NET功能,特别是事件,都会被正确处理,因此您可以编写普通代码,线程协调将自动进行。
甚至还有一个支持C# 5异步/等待的分支。
您考虑过使用F#提供的T类型的MailboxProcessor吗?
Remact.Net 是我的当前项目。它使用 WebSockets 和 Json 进行远程 actor 通信。 它提供 C# actor 的类型安全性,同时支持使用 JavaScript 编写的基于浏览器的动态类型的 actor。
我的上一个项目是 AsyncWcfLib。这是一个用于进程中或不同应用程序之间进行通信的 C# 库。远程消息传递使用 WCF。
一个 actor 目录服务使得在多个主机上可以发现 actor。这些主机可能运行 Windows 或 Linux。