Frage

Welche Bibliotheken gibt es für andere Programmiersprachen, um ein Parallelitätsmodell im Erlang-Stil bereitzustellen (Prozesse, Postfächer, Mustervergleichsempfang usw.)?

Notiz:Ich interessiere mich speziell für Dinge, die Erlang ähneln sollen, nicht nur für irgendeine Threading- oder Warteschlangenbibliothek.

War es hilfreich?

Lösung

Message Passing Interface (MPI) (http://www-unix.mcs.anl.gov/mpi/) ist eine hoch skalierbare und robuste Bibliothek für die parallele Programmierung, die ursprünglich auf C ausgerichtet war, jetzt aber in mehreren Varianten verfügbar ist http://en.wikipedia.org/wiki/Message_Passing_Interface#Implementations.Während die Bibliothek keine neue Syntax einführt, stellt sie ein Kommunikationsprotokoll bereit, um die gemeinsame Nutzung von Daten zwischen parallelisierbaren Routinen zu orchestrieren.

Traditionell wird sie aus Gründen der Parallelität beim Computing großer Cluster und nicht auf einem einzelnen System verwendet, obwohl Multi-Core-Systeme durchaus von dieser Bibliothek profitieren können.

Eine weitere interessante Lösung für das Problem der parallelen Programmierung ist OpenMP, ein Versuch, eine portable Erweiterung auf verschiedenen Plattformen bereitzustellen, um dem Compiler Hinweise darauf zu geben, welche Codeabschnitte leicht parallelisierbar sind.

Zum Beispiel (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;
}

Natürlich haben beide Vor- und Nachteile, aber Ersteres hat sich im akademischen Bereich und bei anderen anspruchsvollen wissenschaftlichen Computeranwendungen als äußerst erfolgreich erwiesen.YMMV.

Andere Tipps

Ulf Wiger hatte kürzlich einen tollen Beitrag zu diesem Thema – hier sind die Eigenschaften, die er als erforderlich definiert, bevor man etwas „Erlang Style Concurrency“ nennen kann:

  • Schnelle Prozesserstellung/-zerstörung
  • Fähigkeit zur Unterstützung von >> 10.000 gleichzeitigen Prozessen mit weitgehend unveränderten Eigenschaften.
  • Schnelle asynchrone Nachrichtenübermittlung.
  • Kopieren der Message-Passing-Semantik (Share-Nothing-Parallelität).
  • Prozessüberwachung.
  • Selektiver Nachrichtenempfang.

Nummer 2 oben ist am schwierigsten in VMs und Sprachimplementierungen zu unterstützen, die ursprünglich nicht für Parallelität konzipiert waren.Dies soll nicht dazu dienen, Erlang-artige Parallelitätsimplementierungen in anderen Sprachen außer Kraft zu setzen, aber ein großer Teil des Werts von Erlang liegt in der Fähigkeit, etwas zu erschaffen Millionen von Prozessen, was verdammt schwierig ist, wenn die Prozessabstraktion eine 1:1-Beziehung zu einem Thread oder Prozess auf Betriebssystemebene hat.Ulf hat im obigen Link noch viel mehr dazu.

Scala unterstützt Schauspieler.Aber ich würde Scala nicht absichtlich Erlang ähnlich nennen.

Nichtsdestotrotz ist Scala absolut einen Blick wert!

Microsoft Parallelität und Koordinationslaufzeit für .NET.

Der CCR ist für ein Anwendungsmodell geeignet, das Komponenten in Stücke, die nur durch Nachrichten interagieren können, unterteilt.Die Komponenten in diesem Modell benötigen Mittel, um zwischen Nachrichten zu koordinieren, komplexe Ausfallszenarien zu behandeln und effektiv mit asynchroner Programmierung zu behandeln.

Auch Kelim ist eine Bibliothek für Java, die Nachrichtenübermittlung/Aktoren im Erlang-Stil in die Java-Sprache bringt.

Mike Rettig hat eine .NET-Bibliothek namens erstellt Retlang und ein Java-Port namens Jetlang, der vom Parallelitätsmodell von Erlang inspiriert ist.

Microsofts nicht produktionsbereite Antwort auf Erlang: Microsoft Axum

Für Python können Sie es versuchen Verarbeitungsmodul.

Termite für Gambit Scheme.

Wenn Sie Ruby verwenden, werfen Sie einen Blick auf Revactor:[http://revactor.org/][1]

Revactor ist eine Actor-Modellimplementierung für Ruby 1.9, die auf der leistungsstarken Event-Bibliothek Rev aufbaut.Revactor ist in erster Linie zum Schreiben von Erlang-ähnlichen Netzwerkdiensten und -tools konzipiert.

Schauen Sie sich dieses Codebeispiel an:

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

Revactor läuft nur auf Ruby 1.9.Ich glaube, der Autor der Bibliothek hat die Pflege eingestellt, aber die Dokumentation auf seiner Website ist sehr gut.

Vielleicht möchten Sie auch einen Blick auf Reia werfen:eine Ruby-ähnliche Skriptsprache, die auf der Erlang-VM aufbaut.Reia ist das neue Projekt des Erfinders von Revactor:Tony Arcieri.

Warnung:schamloser Plug!

Ich habe eine Bibliothek für diese Art der Nachrichtenübermittlung in Haskell entwickelt:Verteiltes Haskell im Erlang-Stil.

Volker

JoCaml erweitert OCaml um Join-Kalkül für gleichzeitige und verteilte Programmierung.

Akka (http://akka.io) wird stark von Erlangs OTP beeinflusst.Es basiert auf den Akteuren von Scala und eignet sich hervorragend für die Parallelität in der JVM.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top