2009-02-20 18 views
21

Kürzlich habe ich in alternative Sprachen, die eine Schauspieler/Agent/Shared Noth Architektur unterstützen - dh. Scala, Clojure usw. (Clojure unterstützt auch den Shared State).Design Patterns für Agenten/Actor based Concurrent Design

Bisher konzentrieren sich die meisten Dokumente, die ich gelesen habe, auf den Intro-Level. Nach was ich suche, ist fortgeschrittenere Dokumentation entlang der Bande von vier, aber teilte stattdessen nichts basierend.

Warum? Es hilft, den Wandel im Design Thinking zu verstehen. Einfache Beispiele sind einfach, aber in einer realen Java-Anwendung (single threaded) können Sie Objektgraphen mit Tausenden von Elementen mit komplexen Beziehungen haben. Mit der agentenbasierten Concurrency-Entwicklung wird jedoch eine ganze Reihe neuer Ideen zum Verständnis großer Systeme eingeführt. dh. Agentengranularität - wie viel Status sollte ein Agent verwalten - Auswirkungen auf die Leistung usw. oder sind ihre guten Muster zum Zuordnen von Shared-State-Objektgraphen zu agentenbasiertem System. Tipps zum Zuordnen von Domänenmodellen zu Design. Diskussionen nicht über die Technologie, sondern mehr darüber, wie man die Technologie am besten nutzt (reale "komplexe" Beispiele wären großartig).

Antwort

1

Ich fragte eine ähnliche Frage here, die einige vernünftige Antworten hatte, die helfen können. Ich beobachte deine sorgfältig. Ich habe noch nichts gefunden, was mir wirklich geholfen hat, aber ich suche sehr aktiv.

Ich denke, die Gedankenverschiebung ist die größte Hürde für den Übergang zu parallelen Architekturen und Sprachen, und bis das geplatzt ist, bleiben die Entwickler bei einfach zu erlernenden MS-Stilparadigmen. Damit es wirklich Mainstream wird, muss es seinen Weg in die Schulen finden und neben C# und VB unterrichtet werden.

Meine Antwort auf die 2080 programmers question ist "gleichzeitig".

10

Auch wenn ich keine guten Beispiele der realen Welt finden kann, die Sie mit Mustern direkt ausstatten, gibt es ein paar Stellen zu beginnen.

Die erste ist Ihr Kopf richtig um die Konzepte gewickelt. Ein Buch hilft Sie tun dies ist Making reliable distributed systems in the presence of software errors geschrieben von einem Erlang Guru Joe Armstrong wo erklärt Concurrency Oriented Programmierung in einer sehr zugänglichen Weise. Es ist in der Tat ein Ph.D. These, aber lass dich nicht erschrecken. Es ist bei weitem einfacher zu lesen, und angenehm, als die meisten gängigen Lehrbücher.

Blick auf tatsächliche Systeme bedeutet normalerweise, dass Sie zu viel über die tatsächliche Sprache lernen müssen, damit es auch sinnvoll ist, nur Dinge zu bewerten. Für Erlang bietet die documentation Design-Methodik und Verhaltensweisen (Erlang Speek für Design Pattern-Bibliotheken). Dies zeigt die am häufigsten verwendeten Designmuster in dieser Einstellung. Und diese haben sich beim Aufbau von Großsystemen, d. H. Millionen von Codezeilen (vergleichbar mit einem Faktor 4 bis 10 anderer Sprachen wie Java) und Milloin gleichzeitiger Prozesse, die auf einer Maschine in verteilten Clustern von Maschinen laufen, als effektiv erwiesen. Ein aktuelles Beispiel für ein echtes Live-System ist Facebook Chat.

Für die anderen Frameworks kann ich dir nicht wirklich helfen Ich habe Angst.

+0

der Facebook Chat klingt interessant. Wenn Sie sich das Thema Chat/PBX-Design ansehen, stellen "Interaktions" -Objekte einen guten "Agenten" dar, da eine Interaktion größtenteils in Bezug auf den Status (Parteien, FMS für jede Partei usw.) selbstständig ist. Es wäre schön zu sehen, was sie entworfen haben. – nso1

4

Ein "Aktor" ist selbst das vereinheitlichende Muster für gleichzeitige Programmierung (eine asynchrone Nachrichtenwarteschlange plus einen Ausführungskontext für die Verarbeitung), aber es gibt viele Entwurfsmuster, die bei der Spezifizierung von Aspekten oder Elementen von agentenbasierten Systemen helfen. Viele der häufigsten finden Sie im Wikipedia-Artikel unter Concurrency Patterns.Einige Highlights:

Wenn Sie nicht bereits über sie gekommen sind, kann Akka für Sie von Interesse sein - es ist ein "rein" ereignisgesteuertes Akteur-Framework, das auf der JVM läuft.