2017-04-04 4 views
0

Ich habe eine Frage zu den Nachrichten, die zum Postfach eines Schauspielers gehen. Mir ist bewusst, dass der Schauspieler einen Briefkasten hat, aber nicht als Teil davon. Die Mailbox wird vom Akteursystem bereitgestellt.Schauspieler und Postfächer - Wer liefert die Nachricht?

Die Frage:

Ich habe einen Schauspieler myAct mit myAct id 10. auf Faden dann! eine Nachricht an einen anderen Schauspieler yourAct. Liegt es in der Verantwortung von Thread 10, die Nachricht an das Postfach von yourAct zu senden, oder weist ActorSystem einen anderen Thread zu, um die Nachricht an die Mailbox zu übermitteln.

Antwort

0

Akkas Standard-Executor für dispatchers ist ein fork-join-executor, der einen Warteschlangen-basierten work-stealing Algorithmus verwendet. Ich glaube also nicht, dass ein bestimmter Disponent während des gesamten Lebenszyklus eines Akteurs der alleinige Eigentümer einer bestimmten Aufgabe ist.

Diese article beschreibt einige Details darüber, wie die Worker-Threads im Fork-Join-Framework arbeiten.

2

Zunächst alle möglichen irreführenden Fakten zu entfernen: Es ist kein Thread zugewiesen als verantwortlich für einen bestimmten Akteur. Daher, wenn Sie sagen, I have an actor myAct running on thread with id 10 - könnte dies richtig sein, aber nur zu dieser bestimmten Zeit.

Snippet aus der Dokumentation Akka offiziell:

Hinter den Kulissen Akka werden Sätze von Akteuren auf Gruppen von realen Threads laufen, wo in der Regel viele Akteure einen Thread teilen, und die anschließenden Anrufungen eines Akteurs kann beenden auf verschiedenen Threads verarbeitet werden. Akka stellt sicher, dass dieses Detail die Umsetzung nicht wirkt sich die Single-threadedness

Zweitens Nachrichtenübermittlung und Verarbeitung sind zwei verschiedene Tätigkeiten innerhalb Schauspieler, die sich höchstwahrscheinlich auf verschiedenen geschieht der Schauspieler Zustand der Handhabung Fäden.

Wenn Sie eine Nachricht an einen Akteur senden, senden Sie sie nur an ActorRef, der sich dann an den Dispatcher wendet und ihn zum Einreihen der Nachricht in das Postfach des Zielakteurs verwendet. Daher ist die einzige Blockierung, die aus der Sicht des Aufrufers auftritt, der Vorgang der Enqueueing der Nachricht. Danach kann die gesamte zusätzliche Arbeit und Verarbeitung in einem separaten Thread ausgeführt werden.

Ich hoffe, das war hilfreich.

Verwandte Themen