2016-12-15 1 views
2

Ich habe gelesen, dass ein Akka-Actor Nachrichten nacheinander verarbeitet. Warum ist das?Warum ist das Standardverhalten von Akka Actor, um Nachrichten nacheinander zu verarbeiten?

Was kann ich nicht meinen Kopf wickeln ist "Warum ist die synchronisierte Ausführung von Nachrichten das Standardverhalten?". Ich verstehe, dass für die parallele Ausführung von Mailbox-Nachrichten die Funktionen (auszuführende Aufgaben) 0 Nebenwirkungen haben sollten.

Ist das Standard-Akka-Verhalten, weil diese Anwendungsfälle, die absolut unabhängige Ausführung und 0 Nebenwirkungen haben, eine MINORITÄT sind und wir normalerweise mit Jobs arbeiten, die gemeinsame Ressource benötigen.

Wenn das Entwurfsziel von scala und funktionaler Programmierung 0 Nebenwirkungscode ist, für den das folgende Szenario gilt, dann warum ist dies kein Standardverhalten in der Akka-Aktor-Nachrichtenverarbeitung.

+0

Ich denke, ein Punkt ist, dass Sie über verschiedene Akteure parallelisieren möchten, aber nicht innerhalb eines bestimmten Akteurs. – marstran

Antwort

1

Mein Verständnis ist, dass ein Schlüsselpunkt des Actor-Modells ist es, paralleles Programmieren einfacher zu verstehen (und einfacher, "richtig zu machen"), ohne schwer zu debuggende Probleme wie Deadlocks. Diese

funktioniert, weil:

  • Sie leicht Parallelität durch die Schaffung von mehreren Akteuren und Teilen der Arbeitslast unter ihnen erreichen können.
  • Der Code in jedem Akteur ist single-threaded, und der Status des Akteurs ist vor anderen Akteuren verborgen, so dass Sie den internen Status des Akteurs nicht vor Problemen des gleichzeitigen Zugriffs schützen müssen.

Wenn der Schauspieler mehrere Nachrichten parallel verarbeiten konnte, gleichzeitig konnte seinen eigenen internen Zustand zugreifen, und Sie würden über Sperren, Synchronisation, sich Sorgen zu machen, um mit wieder ConcurrentModificationException s ..., die den Punkt besiegen würde.

1

Wenn Sie einen Blick auf Akka docs werfen, werden Sie feststellen, dass eine der beiden Garantien die Nachrichtenbestellung pro Sender-Empfänger-Paar ist. Wenn Nachrichten in einer indeterministischen Reihenfolge verarbeitet würden, wäre diese Garantie kompromittiert.

Verwandte Themen