Question

Quelles bibliothèques existent pour d'autres langages de programmation afin de fournir un modèle de concurrence de style Erlang (processus, boîtes aux lettres, réception de correspondance de modèles, etc.) ?

Note:Je m'intéresse particulièrement aux choses qui sont censées être similaires à Erlang, pas n'importe quelle bibliothèque de threads ou de files d'attente.

Était-ce utile?

La solution

Interface de transmission de messages (MPI) (http://www-unix.mcs.anl.gov/mpi/) est une bibliothèque hautement évolutive et robuste pour la programmation parallèle, initialement orientée vers le C mais désormais disponible en plusieurs versions http://en.wikipedia.org/wiki/Message_Passing_Interface#Implementations.Bien que la bibliothèque n'introduise pas de nouvelle syntaxe, elle fournit un protocole de communication pour orchestrer le partage de données entre routines parallélisables.

Traditionnellement, il est utilisé dans les grands clusters informatiques plutôt que sur un système unique pour la concurrence, bien que les systèmes multicœurs puissent certainement tirer parti de cette bibliothèque.

Une autre solution intéressante au problème de la programmation parallèle est OpenMP, qui tente de fournir une extension portable sur diverses plates-formes pour fournir des indications au compilateur sur les sections de code facilement parallélisables.

Par exemple (http://en.wikipedia.org/wiki/OpenMP#Work-sharing_constructs):

#define N 100000
int main(int argc, char *argv[])
{
  int i, a[N];
  #pragma omp parallel for
  for (i=0;i<N;i++) 
     a[i]= 2*i;
  return 0;
}

Bien entendu, les deux présentent des avantages et des inconvénients, mais le premier s’est avéré extrêmement efficace dans le monde universitaire et dans d’autres applications informatiques scientifiques lourdes.YMMV.

Autres conseils

Ulf Wiger a récemment publié un excellent article sur ce sujet - voici les propriétés qu'il définit comme requises avant de pouvoir appeler quelque chose "Concurrency de style Erlang":

  • Création/destruction rapide de processus
  • Capacité à prendre en charge >> 10 000 processus simultanés avec des caractéristiques largement inchangées.
  • Passage asynchrone rapide des messages.
  • Copie de la sémantique de transmission de messages (accès simultané sans partage).
  • Surveillance des processus.
  • Réception sélective des messages.

Le numéro 2 ci-dessus est le plus difficile à prendre en charge dans les machines virtuelles et les implémentations de langages qui n'ont pas été initialement conçus pour la concurrence.Il ne s'agit pas de détruire les implémentations de concurrence à la manière d'Erlang dans d'autres langages, mais une grande partie de la valeur d'Erlang vient de sa capacité à créer des millions des processus, ce qui est sacrément difficile si l'abstraction du processus a une relation 1-1 avec un thread ou un processus au niveau du système d'exploitation.Ulf en a beaucoup plus à ce sujet dans le lien ci-dessus.

Scala prend en charge les acteurs.Mais je n'appellerais pas scala intentionnellement similaire à Erlang.

Néanmoins, Scala vaut absolument le détour !

Microsoft Runtime de concurrence et de coordination pour .NET.

Le CCR est approprié pour un modèle d'application qui sépare les composants en pièces qui ne peuvent interagir que via des messages.Les composants de ce modèle ont besoin de moyens de coordonner entre les messages, de gérer les scénarios de défaillance complexes et de gérer efficacement la programmation asynchrone.

Aussi Kilim est une bibliothèque pour Java, qui apporte des messages/acteurs de style Erlang au langage Java.

Mike Rettig a créé une bibliothèque .NET appelée Retlang et un port Java appelé Jetlang qui s'inspire du modèle de concurrence d'Erlang.

Réponse de Microsoft non prête pour la production à Erlang : Microsoft Aksoum

Pour Python, vous pouvez essayer d'utiliser module de traitement.

Termite pour le programme Gambit.

Si vous utilisez Ruby, jetez un œil à Revactor :[http://revactor.org/][1]

Revactor est une implémentation de modèle Actor pour Ruby 1.9 construite sur la bibliothèque d'événements hautes performances Rev.Revactor est principalement conçu pour écrire des services et des outils réseau de type Erlang.

Jetez un œil à cet exemple de code :

  myactor = Actor.spawn do
    Actor.receive do |filter|
      filter.when(:dog) { puts "I got a dog!" }
    end
  end

Revactor ne fonctionne que sur Ruby 1.9.Je crois que l'auteur de la bibliothèque a arrêté de la maintenir mais la documentation sur son site est très bonne.

Vous voudrez peut-être aussi jeter un œil à Reia :un langage de script de type Ruby construit sur la VM Erlang.Reia est le nouveau projet du créateur de Revactor :Tony Arcieri.

Avertissement:prise sans vergogne !

J'ai développé une bibliothèque pour ce genre de message passant en Haskell :Haskell distribué de style Erlang.

Volker

JoCaml étend OCaml avec le calcul de jointure pour la programmation simultanée et distribuée.

Akka (http://akka.io) est fortement influencé par erlangs OTP.Il s'appuie sur les acteurs de Scala et est idéal pour la concurrence sur la JVM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top