Ich habe einen Artikel gelesen, der besagt, dass Scala die Parallelität besser handhabt als Java.
http://www.theserverside.com/feature/Solving-the-Scalability-Paradox-with-Scala-Clojure-and-Groovy
... die Einschränkung der Skalierbarkeit beschränkt sich speziell auf die Java-Programmiersprache selbst, ist jedoch keine Einschränkung der gesamten Java-Plattform ...
Die Skalierbarkeitsprobleme mit Java sind keine neue Entdeckung. Tatsächlich wurde viel Arbeit geleistet, um genau diese Probleme anzugehen. Zwei der erfolgreichsten Projekte sind die Programmiersprachen Scala und Clojure ...
... Scala findet Wege um das problematische Thread- und Locking-Paradigma der Java-Sprache herum ...
Wie ist das möglich? Verwendet Scala nicht die Kernbibliotheken von Java, die alle Threading- und Sperrprobleme von Java auf Scala übertragen?
quelle
Es ist eine Frage der Bibliotheksunterstützung. Java verwendet das Low-Level-Thread-Konstrukt, um die Parallelität darzustellen (dies ist wie die Assemblersprache der Parallelitätswelt). Darüber hinaus können Sie zahlreiche Bibliotheken und Techniken verwenden, um skalierbare Lösungen zu erstellen, z. B. die Unterstützung des Pakets java.util.concurrent und die Befolgung der Techniken von Brian Goetz in seinem Buch Java Concurrency in Practice. Scala half bei der Einführung von Dingen wie dem Akka-Framework (das jetzt auch von Java verwendet werden kann), das einige dieser besseren Praktiken und die Unterstützung von Bibliotheken unterstützt. Das heißt nicht, dass Java, das die Sprache nicht einholen konnte (parallele Sammlungen usw.), wie Kilian feststellt, alles auf der JVM und damit auf der JMM läuft.
Außerdem sind Javas Objekte standardmäßig veränderbar, und es sind einige nicht triviale Kenntnisse erforderlich, um sie effektiv unveränderlich zu machen. Scala macht es angeblich einfacher, unveränderliche Objekte zu erstellen
quelle
Ja, und wenn Sie sich in Scala einschließen, treten dieselben Probleme auf. Der Punkt ist jedoch, dass Sie dies nicht tun sollten, da Scala Ihnen Abstraktionen zur Verfügung stellt, die dieses Problem sicherer behandeln.
Jetzt macht Scala zwei Dinge, die wirklich helfen. Eines davon ist das Schauspieler-Modell, das als Parallelitätsmuster betrachtet werden kann und von Scala als Bibliothek bereitgestellt wird. Wenn Sie ein Java-Programmierer sind, empfehle ich Ihnen, zur Akka- Site zu gehen und sich deren Java-Inhalte anzusehen. Dies ist die Bibliothek, die die aktuelle Schauspieler-Bibliothek von Scala ersetzt, und Sie können sie von Java aus verwenden.
Das zweite, was Scala dabei hilft, ist die Verwendung unveränderlicher Datenstrukturen. Nichts hindert Java daran, unveränderliche Datenstrukturen zu verwenden -
String
zum einen ist es selbst unveränderlich! Unveränderliche Datenstrukturen leiden nicht unter Parallelitätsproblemen, da Threads sie nicht ändern können.Es gibt andere Dinge, die dazu beitragen, vollständige Lösungen zu erstellen, wie z. B. Agenten und stm (beide von Akka erhältlich) oder Latches (von Java).
Nun können die beiden oben genannten Dinge in Java ausgeführt werden, wie ich selbst sagte. Sie können Akka in Java verwenden und unveränderliche Datenstrukturen in Java schreiben (oder aus Bibliotheken verwenden, die diese bereitstellen). Java macht es jedoch schwierig, dieses Zeug zu verwenden, da es weder Typen höherer Ordnung noch Schließungen und erstklassige Funktionen unterstützt.
Während Sie dies tun können, werden Programmierer dies normalerweise nicht tun, da das Schreiben eines solchen Codes in Java sehr ausführlich ist (ich meine, viel mehr als der Standard für Java).
quelle
Der Hauptgedanke des Artikels, auf den verwiesen wird, ist:
Dem kann ich nicht zustimmen. Die Verwendung von JVM-Sprachen wie Scala impliziert:
mit spezifischer Laufzeitunterstützung. Auf diese Unterstützung kann direkt von Java-Programmen aus zugegriffen werden.
Spezifische Syntax, mit der präzise Ausdrücke den Zugriff auf die Laufzeitunterstützung vereinfachen und weniger fehleranfällig machen. Dies ist wahr, und das Schreiben in reinem Java ist ausführlicher und erfordert mehr Disziplin, aber die Lücke ist nicht so dramatisch.
Kurz gesagt, Scala verarbeitet Parallelität besser als Java, da das Actor-Modell verwendet wird. Das Akteurmodell kann gut in Java verwendet werden. Es gibt mehrere Akteursbibliotheken für Java, einschließlich Akka (von Scala verwendet). Ein Wechsel zu Scala ist daher nicht unbedingt erforderlich.
Die Verwendung des Actor-Modells über reines Java hat seine eigenen Vorteile:
quelle