Was macht Schauspieler so leicht?Scala: Warum sind die Actors leicht?
Ich bin nicht einmal sicher, wie sie funktionieren. Sind das nicht getrennte Threads?
Was macht Schauspieler so leicht?Scala: Warum sind die Actors leicht?
Ich bin nicht einmal sicher, wie sie funktionieren. Sind das nicht getrennte Threads?
Wenn sie "leicht" sagen, meinen sie, dass jeder Akteur keinem einzigen Thread zugeordnet ist.
JVM bietet als die primäre Form der concurrency Abstraktionen mit Schlösser Speicher Threads gemeinsam genutzt. Aber gemeinsame Speicher Threads sind ziemlich schwergewichtig und führen zu schweren Leistungseinbußen von Context Switching Overheads. Für eine Implementierung Schauspieler auf der Basis eines Eins-zu-Eins-Abbildung mit JVM-Threads, der Prozess Nutzlast pro Scala Schauspieler wird nicht so leicht sein, dass wir für eine bestimmte Berechnung eine Million Fälle von Schauspieler laichen können. Daher Scala Schauspieler wurden als leichte Ereignisobjekte entworfen, die geplant erhalten und ausgeführt auf einem Worker-Thread-Pool zugrunde liegen, dass automatisch angepasst wird, wenn alle Threads blockieren auf lange Operationen ausgeführt werden. In der Tat implementiert Scala ein vereinheitlichtes Modell von Akteuren - Thread basiert und ereignisbasiert. Scala Schauspieler bieten zwei Form der Federung Mechanismen - eine vollständige Stapelrahmen Suspension (als erhalten) und eine Suspension auf der Grundlage einer Fortsetzung Schließung (als Reaktion implementiert). In Fall von ereignisbasierten Schauspielern wird eine Wartezeit auf react durch eine Fortsetzung Schließung dargestellt, d. H. Eine Schließung, die den Rest der Berechnung des Akteurs erfasst. Wenn der Akteur eine abgehängte Nachricht empfängt, die in dem Schauspieler spezifizierten die Muster übereinstimmt, die Fortsetzung durch Einplanung die Aufgabe zu einem des Arbeitsthreads von dem darunterliegenden Thread-Pool durchgeführt. Die paper "Actors, Unify Threads und Ereignisse" von Haller und Odersky diskutiert die Details der Implementierung.
Wenn eine Ausnahme ausgelöst wird, wird nur der Akteur (und nicht der darunterliegende Thread) richtig sterben? – someguy
@someguy - Ich denke, es hängt wirklich von der Implementierung des Thread-Pools ab, aber ja. – ChaosPandion
Wichtige Referenz Actors that Unify Threads and Events
Ich glaube nicht, dass wir, dass Schauspieler, dass stärken sollte leichte ist.
Erstens sind Thread-basierte Akteure Schauspieler pro Thread, also überhaupt kein Leichtgewicht.
ereignisbasierte Schauspieler sind der Punkt, an dem wir das Gefühl haben, dass Schauspieler leicht sind. es ist leicht, weil es keinen funktionierenden Thread hat, warten Sie und schalten Sie auf einen anderen um, der Arbeitsfaden wechselt gerade von einem Stück Datenarbeit zu einem anderen Stück Datenarbeit, also drehend auf wirkungsvollen Berechnungen.
Ich würde gerne zu dieser Frage hinzufügen: Wie leicht sind Scala Actors? – ziggystar
@ziggystar Von dem, was ich verstehe, sind Akteure nur Aufgaben auf Objektebene.Ich rate "wie leicht" hängt hauptsächlich von der Größe seiner "Mailbox" ab. – someguy