Im vergangenen Jahr habe ich viel an Parallelität in Java gearbeitet und viele gleichzeitige Pakete erstellt und bearbeitet. In Bezug auf die Entwicklung in der gleichzeitigen Welt bin ich also ziemlich zuversichtlich. Außerdem bin ich sehr daran interessiert, mehr über die gleichzeitige Programmierung zu lernen und zu verstehen.
Aber ich kann mir nicht antworten, was als nächstes kommt? Welches Extra sollte ich lernen oder daran arbeiten, um mehr Fähigkeiten im Zusammenhang mit der Multi-Core-Verarbeitung zu erben? Gibt es ein schönes Buch (lesen und genießen Sie "Parallelität in der Praxis" und "Gleichzeitige Programmierung in Java") oder Ressourcen, die sich auf die Multi-Core-Verarbeitung beziehen, damit ich zum nächsten Level übergehen kann?
quelle
Antworten:
Haftungsausschluss - Ich bin kein Experte für Parallelität, aber mein Co-Autor ist, ich mache ihm Papageien :-)
Seit Sie die Bücher von Doug Lea und Brian Goetz gelesen haben, haben Sie definitiv das bisher beste Material behandelt.
In Zukunft gibt es die neuen Verbesserungen für die Parallelität in Java 7. Am deutlichsten sind das Fork / Join-Framework und die neuen asynchronen NIO-APIs.
Java 8 wird weitere Verbesserungen der Parallelität mit Lambdas / parallelen Sammlungen einführen.
Eine andere Sache, die ernsthaft in Betracht gezogen werden sollte, sind alternative Möglichkeiten, mit Parallelität umzugehen. Um ehrlich zu sein, Javas Ansatz "Sperable Mutable Objects" wird immer fehleranfällig sein, unabhängig davon, wie stark die APIs verbessert werden. Daher empfehle ich, das Darstellermodell von Scala und das STM von Clojure als alternative Möglichkeiten zu betrachten, um Parallelitätsprobleme zu lösen und gleichzeitig die Interoperabilität mit Java aufrechtzuerhalten.
[Warnung -> Eigenwerbung] Daher empfehle ich natürlich unser nächstes Buch, The Well-Grounded Java Developer , das alle oben genannten Dinge behandelt: -). [/ warning]
Damit ich nicht vergesse, hat Groovy auch eine sehr empfehlenswerte Gpars-Bibliothek, die ich jedoch nicht persönlich verwendet habe.
quelle
Die Programmiersprache D bietet zwei Paradigmen für die gleichzeitige Programmierung, die beide ihre Verwendung haben und ziemlich interessant sind.
std.concurrency bietet Nachrichtenübermittlung ohne Standardspeicherfreigabe. Alle globalen und statischen Variablen in D sind standardmäßig threadlokal
spawn
undsend
erlauben nicht das Senden von Nachrichten, die eine Indirektion mit veränderbaren Zeigern enthalten. Eine eingeschränkte Freigabe kann über dasshared
Schlüsselwort erreicht werden, was eine zusätzliche Überprüfung durch das Typsystem erfordert. Außerhalb des sicheren Dialekts der Sprache können Sie mit dem__gshared
Schlüsselwort klassische globale / gemeinsam genutzte Variablen im C / Java-Stil erzwingen. In Bezug auf die Rennsicherheit sind dann alle Wetten ungültig. Dieses Modell wird in einem kostenlosen Kapitel von Andrei Alexandresus Buch "The D Programming Language" beschrieben.std.parallelism ist weniger sicher, aber in gewisser Weise flexibler als std.concurrency und ist speziell auf Multicore-Daten und Task-Parallelität ausgerichtet, um den Datenverarbeitungsdurchsatz zu erhöhen, anstatt die allgemeine Parallelität. Es verfügt über eine parallele foreach-Schleife, asynchrone Funktionsaufrufe, parallele Reduzierungen usw. Es bietet Mechanismen, die das Schreiben von rennsicherem Code erleichtern, erfordert jedoch noch ein gewisses Maß an Disziplin.
Eine ausführlichere Diskussion über die beiden wichtigsten Multithreading-Paradigmen in D findet sich in meinem kürzlich erschienenen Artikel zu diesem Thema.
quelle
Ich würde Ihnen dringend empfehlen, sich Clojure anzusehen
Der Ansatz zur Parallelität ist sehr neu und meiner Ansicht nach ein bedeutender Fortschritt gegenüber dem, was Sie in Java und den meisten anderen Sprachen sehen. Einige wichtige Punkte:
Ich würde vorschlagen , dieses Video als Einführung anzusehen
quelle
Schauen Sie sich die Scala-Sprache an, die Java erweitert und auf der JVM ausgeführt wird. Es leiht sich den Begriff "Schauspieler" von Erlang aus und bietet eine gute Möglichkeit zur Behandlung von Parallelitätsfehlern.
quelle
Wenn Sie es auf eine ganz neue Ebene bringen möchten, sollten Sie sich mit der Programmierung mit CUDA befassen .
Auf diese Weise können Sie Ihre Algorithmen auf Hunderte von Prozessorkernen auf Ihrer Grafikkarte anstatt auf die wenigen Haupt-CPU-Kerne verteilen. Es gibt sogar Sprachbindungen, die es anscheinend relativ einfach machen, Hochsprachen wie Python mithilfe von GPGPU- Techniken zu beschleunigen .
quelle
Programmieren von Parallelität auf der JVM: Mastering Synchronization, STM und Actors beschreibt die gleichzeitige Programmierung in Scala, Clojure, JRuby und Groovy.
Sie erhalten ein ziemlich solides Verständnis für verschiedene Ansätze zur Parallelität.
Wo ist dein Lächeln?
quelle