JMS- und Scala-Schauspieler teilen eine theoretische Ähnlichkeit, denken jedoch nicht, dass sie notwendigerweise dieselben Probleme architektonisch lösen. Akteure sollen eine leichte Alternative zur Parallelität mit gemeinsamem Speicher sein, bei der es im Allgemeinen schwieriger ist, versehentlich Rennen und Deadlocks zu erstellen. JMS ist eine hochentwickelte API, die Direct Messaging, Publish / Subscribe, Transaktionen, EJB-Integration usw. umfasst.
Das nächstgelegene JMS, das einem Akteur am nächsten kommt, ist eine nachrichtengesteuerte Bean, die von einer nicht persistenten, nicht transaktionalen, nicht pub / sub-Warteschlange unterstützt wird. Ich werde das eine "einfache JMS-Bean" nennen.
Nun zu Ihren Fragen.
Leistung ist schwer zu besprechen, da JMS eher eine Spezifikation als eine Implementierung ist. Nichtsdestotrotz würde ich bei Verwendung einer einfachen JMS-Bean erwarten, dass die Leistung in etwa ähnlich ist und dem Schauspieler in Bezug auf Zeit und Speicher möglicherweise einen gewissen Vorteil verschafft. Wenn Sie JMS Funktionen wie Pub / Sub, Transaktionen usw. hinzufügen, wird die Leistung natürlich noch weiter beeinträchtigt, aber dann versuchen Sie, Äpfel mit Orangen zu vergleichen.
In Bezug auf die Skalierbarkeit sollten einfache JMS-Beans ziemlich genau so skaliert werden wie Akteure. Das Hinzufügen von Transaktionen zum JMS-Mix beeinträchtigt natürlich die Skalierbarkeit um einen Betrag, der vom Umfang der Transaktionen abhängt.
Die umfassendere Frage, was Schauspieler tun, kann JMS nicht. Nun, ohne eingebautes Pub-Sub oder Transaktionen scheinen die Schauspieler von JMS abzuziehen - und im Großen und Ganzen stimmt das. Aber hier ist die Sache: Schauspieler benötigen so wenig Code, dass ich sie gerne für sehr feinkörnige Parallelität verwenden kann. In gewöhnlichem Java-Code könnte ich sagen: "Ich habe keine Lust, mit JMS und seinen Abhängigkeiten oder dem dafür benötigten Code usw. zu schrauben, also werde ich einfach einen Thread erzeugen, eine Sperre verwenden und eine Datenstruktur gemeinsam nutzen." Bei Scala-Schauspielern sage ich viel eher: "Ich werde einfach einen Schauspieler auspeitschen und weitermachen."
Es gibt auch einen philosophischen Unterschied im Design. Akteure haben ein einfaches, integriertes Konzept von Supervisor-Hierarchien. Schauspieler werden normalerweise in einem "Let it Crash" -Design verwendet. Wenn ein Schauspieler aus irgendeinem Grund stirbt, ist ein anderer Schauspieler dafür verantwortlich, zu entscheiden, was dagegen zu tun ist, z. B. diesen Schauspieler neu zu starten, eine Reihe von Schauspielern zu töten und alle neu zu starten oder eine Reihe von Schauspielern und sich selbst zu töten, damit ein anderer Schauspieler dies kann komm mit dem Problem klar. So etwas kann an JMS angehängt werden, aber es ist kein Kern der API und muss irgendwie extern verwaltet werden.
Übrigens, für eine Scala-Schauspielerbibliothek, die sich mehr in die Bereiche bewegt, die JMS abdeckt, siehe Akka . Akka bringt auch einen deklarativen Ansatz für viele gängige Strategien der Akteurshierarchie.