Frage

Wann sollte die Schauspieler Modell verwendet werden ?

Es garantiert sicher nicht blockadefreien Umgebung.

Schauspieler A kann auf eine Nachricht von B warten Sie, während B für A. wartet

Auch wenn ein Schauspieler, um sicherzustellen, hat seine Botschaft, bevor sie zu ihrer nächsten Aufgabe bearbeitet wurde, wird es eine Nachricht senden und für eine „Ihre Nachricht verarbeitet wurde“ Nachricht warten, anstatt der einfachen Blockierung.

Was die Leistung des Modells ist?

War es hilfreich?

Lösung

einige Concurrency Problem gegeben, was werden Sie schauen, um zu entscheiden, ob Akteure verwenden oder nicht?

Zuerst möchte ich sehen, das Problem zu definieren ... ist die primäre Motivation einer Beschleunigung eines verschachtelten for-Schleife oder Rekursion? Wenn so ein einfache Aufgabe basierter Ansatz oder parallele Schleife Ansatz wird für Dich wahrscheinlich gut funktionieren (und nicht als Akteure).

Wenn Sie jedoch ein komplexeres System haben, die Abhängigkeiten und die Koordinierung der gemeinsamen Zustand beinhaltet, dann kann ein Schauspieler Ansatz helfen. Insbesondere durch die Verwendung von Schauspielern und Message-Passing-Semantik man oft vermeiden kann explizite Sperren mit gemeinsamem Staat zu schützen, indem tatsächlich der Anfertigung von Kopien dieses Staat (Nachrichten) und darauf zu reagieren.

Sie können dies mit den klassischen Synchronisationsproblemen wie im Restaurant zu essen Philosophen und das schlafenden Friseure Problem ganz einfach tun. Sie können aber auch die ‚Schauspieler‘ verwenden, um mit modernen Mustern zu helfen, das heißt Ihre Fassade könnte ein Schauspieler sein, Ihre Modellansicht und Controller könnte auch Akteure, die miteinander in Verbindung stehen.

Eine andere Sache, die ich beobachtet habe ist, dass Schauspieler Semantik erlernbar sind von den meisten Entwicklern und ‚sicherer‘ als ihre Pendants gesperrt. Dies ist, weil sie die Abstraktionsebene erhöhen und ermöglichen es Ihnen, auf die Koordinierung der Zugriff auf diese Daten zu konzentrieren, anstatt zu schützen alle auf die Daten mit Schlössern zugreift. Als Beispiel vorstellen, dass Sie eine einfache Klasse mit einem Datenelement haben. Wenn Sie eine Sperre in dieser Klasse zu setzen wählen, um Zugriff auf diese Daten Mitglied zu schützen, dann auf dieser Klasse alle Methoden müssen sicherstellen, dass sie diese Daten Element unter der Sperre zugreifen. Dies wird besonders dann problematisch, wenn andere (oder Sie), um die Klasse zu einem späteren Zeitpunkt zu ändern, müssen sie erinnert , dass die Sperre zu verwenden.

Auf der anderen Seite, wenn diese Klasse ein Schauspieler wird und das Datenelement wird zu einem Puffer oder Port Sie mit über Nachrichten kommunizieren, müssen Sie sich nicht mehr daran erinnern, das Schloss zu nehmen, weil die Semantik in die Puffer eingebaut ist und Sie werden sehr explizit wissen, ob Sie auf, dass basierend auf der Art des Puffers blockieren werden.

-Rick

Andere Tipps

Die Nutzung von Schauspieler ist „natürlich“ in mindestens zwei Fällen:

  1. Wenn Sie Ihr Problem in einer Reihe von unabhängigen Aufgaben zersetzen können.
  2. Wenn Sie Ihr Problem in einer Reihe von Aufgaben, die von einem klaren Worflow verknüpfen zersetzen können (dh. Datenflussprogrammierung ).

Zum Beispiel, wenn man komplexe Daten unter Verwendung einer Reihe von Filtern zu verarbeiten, ist es einfach, eine Pipeline von Schauspielern zu verwenden, in denen jeder Akteur Daten von einem vorgeschalteten Akteur empfängt und setzt Daten an eine nachgeschaltete Schauspieler.

Natürlich ist dieser Datenfluss muss nicht linear sein, und wenn ein Schritt in Ihrer Pipeline langsam ist, können Sie stattdessen einen Pool von Schauspielern verwenden, um die gleiche Arbeit tun. Eine weitere Möglichkeit, um die Last von der Lösung von Problemen balancieren, wäre stattdessen einen bedarfsorientierte Ansatz mit einer Art virtuellen Kanban System.

Natürlich können Sie die Synchronisation zwischen den Akteuren in fast allen interessanten Fällen benötigen, aber im Gegensatz zu klassischen Multi-Thread-Ansatz ist diese Synchronisation wirklich „Beton“. Sie können Jungs in einer Fabrik vorstellen, vorstellen, mögliche Probleme Analog (Arbeiter aus Job laufen eine riesige Lagerplatz, usw. zu tun, ist Upstream-Aktivitäten zu schnell und Zwischenprodukte müssen), können Sie dann eine Lösung noch einfacher.

Akteure sind asynchron und gleichzeitig aber keine Nachricht um bzw. Fristen zu gewährleisten, wenn die Nachricht beaufschlagbar kann. Daher atomare Transaktionen nicht in Schauspieler aufgeteilt werden.

Wenn die Anwendung / Aufgabe beinhaltet keine wandelbaren Zustand dann Schauspieler sind Overkill als Schauspieler Gerüste gehen auf große Längen Rennbedingungen zu vermeiden.

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