Frage

Kann ich Maximalgröße für ein Postfach des Schauspielers in Scala?

Nehmen Sie das Erzeuger-Verbraucher-Problem. Mit Gewinde kann ich die Produzenten blockieren, wenn der Puffer voll ist. Ich sah in Scala ein paar Erzeuger-Verbraucher-Beispiele geschrieben und sie alle verwenden Akteure mit Briefkästen als „Puffer“ verwendet. Kann ich die Postfachgröße eingestellt Hersteller zu verursachen, zu warten, bis ein Verbraucher bereit ist? Jede andere elegante Lösung zur Vermeidung unkontrollierbares Wachstums von Briefkästen?

War es hilfreich?

Lösung

Sie können einen Schauspieler erstellen, die zwischen dem Hersteller und Verbraucher als Puffer wirkt. Der Puffer überprüft seine Mailbox auf seine Schleifendaten aus. Es sendet eine „Überlastung“ Nachricht an den Hersteller zurück, wenn die Anzahl der gepufferten Produkte zu hoch ist; und sendet eine „klare“ Botschaft einmal alles wieder in Ordnung ist. Bei zu vielen Meldungen fällt es einfach eingehende Einsen (oder Ältesten).

Der Verbraucher fordert aktiv für Produkte aus dem Puffer, der wiederum ein Produkt zurückschickt. Wenn der Puffer leer ist, hält der Verbraucher für den Eingang warten.

Der Hersteller versendet die Produkte an den Puffer Schauspieler. Wenn es eine „Überlastung“ Nachricht empfängt, kann es die Produktion stoppen, oder es kann produzieren weiter, die Tatsache zu wissen, dass die Produkte könnten runterfallen.

Natürlich ist diese Logik direkt in den Erzeuger oder Verbraucher selbst implementiert werden könnte, aber ein separater Puffer ermöglicht es Ihnen leichter mehrere Hersteller und / oder Verbraucher einzuführen.

Andere Tipps

Die Actor.mailboxSize Methode gibt die Anzahl der anstehenden Meldungen in dem Schauspieler Mailbox.

Dies kann zur Drosselung des Produzenten auf verschiedene Weise verwendet werden.

Zum Beispiel könnte eine Möglichkeit sein,

Der Hersteller überprüft, ob die Verbraucher mailboxSize größer als ein Schwellenwert ist. Wenn ja, dann sendet er eine SpecialMessage an den Verbraucher, und Blöcke auf einer Semaphore. Wenn der Verbraucher diese SpecialMessage empfängt gibt er die Semaphore. Der Produzent kann nun munter weiter, es ist Geschäft.

Dies vermeidet Polling sowie alle Nachrichten gelöscht.

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