71 votes

Une bonne implémentation des acteurs en C# ?

Existe-t-il une bonne implémentation de modèle de concurrence des acteurs pour .net/c# ?

Je dois optimiser une routine c# et je pense que le modèle des acteurs s'adapte parfaitement comme solution à mon problème. Malheureusement, je n'ai d'expérience que dans l'implémentation de Scala.

52voto

Roger Alsing Points 5542

Pour tout ce que ça vaut, je fais remonter un fil vieux de 4 ans. [Modifier à nouveau Nous avons une nouvelle maison brillante à : https://github.com/akkadotnet/akka.net/ akka-actor, akka-remote, akka-testkit sont à peu près entièrement portés. Travail en cours sur akka-cluser

[Edit]

Le projet est maintenant renommé en Akka.NET (nous avons obtenu l'accord de Typesafe pour utiliser le nom Akka puisque nous sommes un pur port)

Le framework java Akka ayant connu un grand succès, j'ai décidé de porter la partie acteur de ce framework en .NET.

Vous pouvez le trouver ici : https://github.com/rogeralsing/Pigeon

Je me suis dit qu'il valait mieux rester aussi proche que possible de l'implémentation java pour bénéficier de la grande quantité d'expérience et de documentation qu'ils ont dans ce domaine.

Certains cadres d'acteurs pour .NET sont des jouets ou des expériences. Ils sont construits autour de quelques concepts clés et peuvent fonctionner, mais ce ne sont pas des librairies complètes sur lesquelles vous baseriez la conception d'une application.

Et d'autres ne font que promouvoir une mauvaise conception. Par exemple, les "acteurs typés" où vous créez une classe qui ressemble à une POCO où les appels de méthode sont magiquement traduits en appels asynchrones sont mauvais. Ils sont mauvais pour la même raison que .net remoting et com+ étaient mauvais, ils essaient de faire croire que tout est local et en cours de traitement. Ils rendent le passage de messages implicite, même si c'est un concept explicite. Ils permettent d'oublier facilement la latence et la tolérance aux pannes.

24voto

silverfighter Points 2607

On peut également se pencher sur le projet Orleans, l'approche de Microsofts sur les acteurs (publié la semaine dernière).

Il s'agit du site web des projets : http://research.microsoft.com/en-us/projects/orleans/

Voici également un bon exposé de la construction 2014 comme introduction.

Utilisation d'Orléans pour construire les services cloud distribués de Halo 4 dans Azure http://channel9.msdn.com/Events/Build/2014/3-641

Veuillez noter que les bits à télécharger tels qu'affichés aujourd'hui sont CTP.

22voto

alex25 Points 470

Vous devriez jeter un coup d'œil à MS Runtime de Concurrence et de Coordination (CCR) et le Services logiciels décentralisés (DSS) dans le cadre de Studio robotique .

Ces cadres vous permettent de développer des services faiblement couplés qui répondent à la plupart des exigences de l'approche par acteur.

Axum serait le mieux adapté, malheureusement il est encore dans une sorte de phase alpha/beta (UPDATE il a été tué en Février 2011). Je l'utilise pour mes recherches et je dois dire que l'orientation générale est excellente et que le potentiel est énorme.

Ce n'est pas C# mais C++ qui est la norme de Microsoft. Bibliothèque des agents asynchrones qui vous offre toutes les fonctionnalités dont vous avez besoin.

Jetez un coup d'œil à Fonctions liées au parallèle de .NET 4.

J'espère que cela vous aidera !

18voto

Henrik Points 4557

Stact

Un acteur-lib sur .Net. Assez compétent et bien testé. La base de TopShelf, MassTransit et NServiceBus.Host.

https://github.com/phatboyg/stact

Contient les abstractions :

  • Flux de travail, permettant de définir et d'exécuter des protocoles complexes basés sur l'état.
  • Les canaux, qui permettent le passage de messages entre les objets.
  • Les acteurs, qu'ils soient typés ou anonymes
  • Fibres, un modèle d'enfilage coopératif
  • Routage
  • Demande/Réponse
  • Planificateurs

A venir :

  • Hiérarchie appropriée des superviseurs

En cours de développement actif au moment de la rédaction de ce document par Chris.

Vue d'ensemble :

Le développement d'applications concurrentes nécessite une approche qui s'écarte des méthodes actuelles de développement logiciel, une approche qui met l'accent sur la concurrence et la communication entre les composants autonomes du système. Le modèle d'acteur définit un système de composants logiciels appelés acteurs qui interagissent les uns avec les autres en échangeant des messages (au lieu d'appeler des méthodes sur des interfaces dans une conception orientée objet), produisant un système dans lequel les données (au lieu du contrôle) circulent à travers les composants pour répondre aux exigences fonctionnelles du système.

Stact est une bibliothèque permettant de créer des applications utilisant le modèle d'acteur dans .NET. L'assemblage principal, Stact.dll, est la bibliothèque d'acteurs et comprend tout ce qui est nécessaire pour utiliser le modèle d'acteurs dans tout type d'application. Il existe également des frameworks de support supplémentaires, tels que Stact.ServerFramework, qui peuvent être utilisés pour exposer les acteurs via des sockets ou HTTP, permettant ainsi de construire des services à l'aide des acteurs.

13voto

Alex Davies Points 131

NAct est un cadre pour acteurs pour .NET qui adopte une approche vraiment facile à utiliser. (Disclaimer : je l'ai écrit)

Le passage de messages entre deux acteurs est simplement un appel de méthode entre deux objets. Vous devez vous assurer que tous les arguments de la méthode sont immuables, et que le système sera sécurisé.

Il fonctionne en enveloppant vos objets dans un proxy qui s'occupe de la commutation des fils. Toutes les fonctionnalités normales de .NET, en particulier les événements, sont traitées correctement. Vous pouvez donc écrire du code normal et le thread marshalling se fera tout seul.

Il y a même une branche avec un support pour C# 5 async/await.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X