2016-12-20 1 views
0

Ich benutze Akka Schauspieler in Scala. Ich würde gerne wissen, ob es einen Weg gibt, einen Akteur zu haben, der während der Verarbeitung einer empfangenen Nachricht sein Postfach periodisch auf andere Nachrichten überprüfen kann und diese Nachrichten anschließend seine Variablen ändern kann.Wie man periodisch ein Akteurpostfach überprüft und Variablen in scala ändert

Ein Schema wie:

class Actor1 (constructors){ 

    def receive={ 
     case "go" => run()  //the actor starts 
     case "alter variables" // a new message is stashed in mailbox 
    } 

    def run={ 
     //do stuff 
     check(mailbox) //while the porocessing of the "go" message 
        // is not finished 
     if ("alter variables" in mailbox) { 
      change a variable value 
     } 
    } 

}

+0

Ich weiß nicht, warum Sie das tun würden, aber ich denke, es würde die Entwurfsmuster durchbrechen, die Akka durchzusetzen versucht, also würde ich davon abraten. Sie können etwas ähnliches einrichten, indem Sie Ihre eigene Warteschlange implementieren, in die Sie die Nachrichten einfügen, und über einen anderen Mechanismus verfügen, der die Überprüfung dieser Warteschlange ermöglicht. – childofsoong

+0

Dies ist nicht möglich. Schauspieler verarbeiten * eine Nachricht zu einer Zeit *. Auf diese Weise garantieren sie einen sicheren veränderbaren Zustand in einer gleichzeitigen Umgebung. – Ryan

Antwort

0

Nichts sagt Sie keine lange laufende Aufgabe in einem anderen Thread bewegen kann, eine Zukunft mit, im Inneren Schauspieler. Ihr Akteur würde weiterhin auf Nachrichten in der Mailbox antworten, während ein anderer Thread auf Ihrer Verarbeitung tuckert. Sie können Ihre Rückrufe für die Zukunft einrichten und die Aufgabe normal beenden lassen.

+0

Beachten Sie, dass das Ändern des Status eines Actors aus einem Callback sehr, sehr gefährlich ist und nie ausgeführt werden sollte. – Ryan

+0

Ich möchte Futures nicht verwenden, weil ich sie bereits ausprobiert habe und der Code, den ich gerade schreibe, langsamer ist als seine Single-Core-Version. Ich möchte entweder jederzeit auf meine Mailbox zugreifen oder auf eine Variable von zwei verschiedenen Akteuren im selben System zugreifen. – Noowada

+0

@ user1834705 Das ist nicht möglich. – Ryan

Verwandte Themen