Gibt es eine gute Implementierung des Akteur-Parallelitätsmodells für .net / c #?
Ich muss die AC # -Routine optimieren und ich denke, dass das Schauspielermodell perfekt als Lösung für mein Problem passt. Leider habe ich nur Erfahrung mit der Scala-Implementierung.
c#
.net
concurrency
actor
Borba
quelle
quelle
Antworten:
Sie sollten sich MS Concurrency & Coordination Runtime (CCR) und die dezentralen Softwaredienste (DSS) von Robotic Studio ansehen .
Mit diesen Frameworks können Sie lose gekoppelte Services entwickeln, die die meisten Anforderungen an den Akteuransatz erfüllen.
Axum passt am besten, leider befindet es sich noch in einer Alpha / Beta-Phase (UPDATE wurde im Februar 2011 getötet). Ich benutze es für meine Forschung und muss sagen, dass die allgemeine Richtung großartig ist und ein enormes Potenzial hat.
Nicht C #, sondern C ++ ist die Asynchronous Agents Library von Microsoft, die Ihnen alle Funktionen bietet, die Sie benötigen.
Schauen Sie sich die parallelen Funktionen von .NET 4 genau an .
Ich hoffe es hilft!
quelle
.NET Actor Model-Frameworks:
Proto.Actor
https://github.com/AsynkronIT/protoactor-dotnet
Akka.NET
https://github.com/akkadotnet/akka.net
Microsoft Orleans
https://github.com/dotnet/orleans
quelle
Man könnte sich auch den Ansatz von Project Orleans Microsofts zu Schauspielern ansehen (der letzte Woche veröffentlicht wurde).
Dies ist die Website des Projekts : http://research.microsoft.com/en-us/projects/orleans/
Hier ist auch ein guter Vortrag von Build 2014 als Einführung
Verwenden von Orleans zum Erstellen der verteilten Cloud-Dienste von Halo 4 in Azure http://channel9.msdn.com/Events/Build/2014/3-641
Bitte beachten Sie, dass die heute veröffentlichten Bits zum Herunterladen CTP sind.
Einführung in Orleans: http://felixnotes.com/orleans-microsofts-take-on-the-actor-pattern-in-net/
Und ja, es war auch Open Source: https://github.com/dotnet/orleans
quelle
Stact
Eine Actor-Lib auf .Net. Sehr kompetent und gut getestet. Die Gründung von TopShelf, MassTransit und NServiceBus.Host.
https://github.com/phatboyg/stact
Enthält die Abstraktionen:
Bevorstehende:
Zum Zeitpunkt des Schreibens von Chris aktiv entwickelt.
Überblick:
Die Entwicklung gleichzeitiger Anwendungen erfordert einen Ansatz, der von den aktuellen Softwareentwicklungsmethoden abweicht. Dieser Ansatz betont die Parallelität und Kommunikation zwischen autonomen Systemkomponenten. Das Akteurmodell definiert ein System von Softwarekomponenten, die als Akteure bezeichnet werden und miteinander interagieren, indem sie Nachrichten austauschen (anstatt Methoden an Schnittstellen in einem objektorientierten Design aufzurufen) und ein System erzeugen, in dem Daten (anstelle von Steuerung) durch Komponenten fließen, um sich zu treffen die funktionalen Anforderungen des Systems.
Stact ist eine Bibliothek zum Erstellen von Anwendungen mithilfe des Akteurmodells in .NET. Die Hauptassembly, Stact.dll, ist die Akteursbibliothek und enthält alles, was zur Verwendung des Akteurmodells in jeder Art von Anwendung erforderlich ist. Es gibt auch zusätzliche unterstützende Frameworks wie Stact.ServerFramework, mit denen Akteure über Sockets oder HTTP verfügbar gemacht werden können, sodass Dienste mithilfe von Akteuren erstellt werden können.
quelle
NAct ist ein Akteurs-Framework für .NET, das einen wirklich benutzerfreundlichen Ansatz verfolgt. (Haftungsausschluss: Ich habe es geschrieben)
Die zwischen zwei Akteuren übertragene Nachricht ist nur ein Methodenaufruf zwischen zwei Objekten. Sie müssen sicherstellen, dass alle Methodenargumente unveränderlich sind und dass sie threadsicher sind.
Es funktioniert, indem Sie Ihre Objekte in einen Proxy einbinden, der sich mit dem Threadwechsel befasst. Alle normalen .NET-Funktionen, insbesondere Ereignisse, werden korrekt behandelt, sodass Sie normalen Code schreiben können und das Thread-Marshalling von selbst erfolgt.
Es gibt sogar einen Zweig mit Unterstützung für C # 5 async / await.
quelle
Microsoft hat heute Azure Service Fabric angekündigt, das gemäß diesem Bild ein Programmiermodell für Schauspieler implementiert:
Siehe die Ankündigung: http://azure.microsoft.com/blog/2015/04/20/announcing-azure-service-fabric-reducing-complexity-in-a-hyper-scale-world/
Update: Das SDK ist jetzt verfügbar und es gibt auch ein Video-Tutorial .
quelle
Ich kenne keine Implementierungen für C #, aber es gibt eine ganz neue Programmiersprache, die auf dem Actor-Modell von Microsoft basiert. Es heißt Axum :
quelle
Haben Sie MailboxProcessor of T in Betracht gezogen, das mit F # versehen ist?
quelle
Sie sollten auch PostSharp-Akteure berücksichtigen
quelle
Remact.Net ist mein aktuelles Projekt. Es verwendet WebSockets und Json für das Remote-Actor-Messaging. Es bietet Typensicherheit für C # -Darsteller, unterstützt jedoch auch dynamische Typen für browserbasierte Akteure, die in Java-Skript geschrieben sind.
Mein vorheriges Projekt war AsyncWcfLib . Dies ist eine C # -Bibliothek für Akteure, die in einem Prozess oder zwischen verschiedenen Anwendungen kommunizieren. Die Remote-Nachrichtenübergabe verwendet WCF.
Ein Akteurkatalogdienst ermöglicht die Akteurserkennung auf mehreren Hosts. Auf den Hosts kann Windows oder Linux ausgeführt werden.
quelle
FSharp.Actor
Ein Schauspieler-Framework für F #.
Aus einem Beispiel:
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() )
Das Senden von zwei Nachrichten an den "Schizo" -Darsteller führt zu
let schizo = Actor.spawn (Actor.Options.Create("schizo")) schizoPing !!"schizo" <-- "Hello" !!"schizo" <-- "Hello"
Ausgabe:
(schizo): "Hello" ping (schizo): "Hello" pong
Finden Sie es bei github und bei docs
quelle
Ich habe gerade diese Frage bemerkt und dachte daran, einen neueren Datenpunkt hinzuzufügen. Microsoft hat derzeit ein halboffizielles Projekt dafür, ActorFX . Es ist Open Source und entwickelt sich weiter, aber es lohnt sich, ein Auge auf ...
quelle
Wie bereits erwähnt, bietet die MailboxProcessor-Klasse von F # eine einfache und unkomplizierte Implementierung des Akteurmodells. Eine fantastische Einführung in die Verwendung finden Sie hier . F # arbeitet sehr gut mit C # zusammen und Sie können den Agenten in eine Klasse mit Methoden einschließen, die verschiedene Nachrichten veröffentlichen. Informationen zu den Fällen, in denen der Agent mit einer asynchronen Antwort antwortet, finden Sie in der PostAndAsyncReply- Methode. Dies gibt einen Async-Workflow zurück, den Sie mit der Async.StartAsTask- Methode in eine Aufgabe verwandeln können, die in C # erwartet werden kann.
Wenn Sie Ihre Schauspieler remote verteilen müssen, empfehlen wir Ihnen Akka.NET, das sowohl C # - als auch F # -APIs bietet.
quelle