Frage

Ich betrachte Schauspieler in einem System mit einigen Speichern wickeln (könnte eine Datenbank sein, könnte eine In-Memory-Sammlung sein). Der Grund, warum ich dies tun möchte, ist, weil ich in den Laden keine Anrufe wollen aus dem Code zu blockieren, die sie ruft und ich beabsichtige, ein hohes Volumen an Nachrichten, die über drücken.

könnte eine eingehende Nachricht des Akteurs Warteschlange Griff Hunderttausende von Nachrichten? Welcher Unterschied in der Leistung würde es zwischen Code direkt eine Methode für ein Objekt aufrufen und einen Schauspieler mit einer Schlange in der Mitte platzieren?

Prost

Joe

War es hilfreich?

Lösung

Der Schauspieler Mailbox ist ein dequeue implementiert als wandelbar doppelt verketteten Liste. Die Größe wird nur durch den verfügbaren Speicher gebunden. Wenn Sie zu viele Nachrichten senden schneller als der Schauspieler sie verarbeiten kann und Sie werden OutOfMemoryError erhalten.

A eine Nachricht an einen Schauspieler zu senden ist eine Methode aufrufen. Es gibt Overhead mit Einreihen der Nachricht, die Benachrichtigung des Schauspielers, die Zuordnung den Schauspielern einen Thread zugeordnet ist, usw. Es gibt also eine Menge Sachen auf mit dieser Nachricht senden gehen und damit eine ganze Menge Aufwand im Vergleich zu einem einfachen alten synchronen Methodenaufruf. Natürlich, wenn die Methode sitzt da und Blöcke für eine Weile wird es langsamer am Ende wird, zumindest durch Wand Zeit.

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