Nebenläufige Programmierung mit Java
Das Buch zu Konzepten und Programmiermodellen für Multicore-Systeme von Jörg Hettel und Manh Tien Tran hat wohl das Zeug dazu, in die Liga der Java-Standardwerke vorzudringen.
- Michael MĂĽller
Jörg Hettel, Manh Tien Tran
Nebenläufige Programmierung mit Java
Konzepte und Programmiermodelle fĂĽr Multicore-Systeme
dpunkt.verlag, 2016
XIV + 363 Seiten, € 34,90
ISBN 978-3-86490-369-4
Konnte Software früher einfach von schnelleren Prozessoren profitieren, ist das heute kaum noch möglich. Seit Jahren ist der Trend fort von immer höheren Takfrequenzen hin zu mehr Kernen im Prozessor zu beobachten. Zwar kann das Betriebssystem einer Software einen dedizierten Kern zuweisen, während die Systemaufgaben parallel dazu auf einem anderen werkeln, doch ist das nur ein kleiner Profit. Bei noch mehr Kernen – und heute sind vier bei einfachen System schon fast die Regel, während leistungsfähige über noch mehr verfügen – profitiert die Software nicht weiter, so lange sie diese Kerne nicht auch selbst nutzt. Dies ist aber explizit zu programmieren.
"Warum ist das Schreiben nebenläufiger Software so schwer?", fragen die Autoren in ihrem Vorwort, schließlich beherrschen Menschen im Alltag auch jede Menge Parallelität. Bei der Softwareentwicklung ist das anders. Doch mit entsprechender Übung ist es Softwareentwicklern möglich, Programme zu schreiben, die mehrere Kerne gleichzeitig für gleichartige (Datenparallelität), aber auch unterschiedliche Aufgaben nutzen können. Dabei nehmen einem moderne Sprachkonzepte sowie Multicore-Frameworks einen Teil der Aufgaben ab, sodass die parallele Programmierung einfacher wird. Programmierer, die sich mit nebenläufiger Programmierung schwertun, könnten auf die Idee kommen, gleich mit letzterem einzusteigen und so die Klippen der nebenläufigen Programmierung zu umschiffen. So einfach es einem gemacht wird, irgendwann wird unweigerlich der Moment kommen, wo man ohne grundlegende Kenntnisse Schiffbruch erleiden wird.
Entsprechend haben die Autoren ihr Buch aufgebaut. Sie beginnen mit grundlegenden Konzepten. Los geht es mit dem Thread-Konzept, das in Java seit Version 1 vorhanden ist. Wie werden Threads erzeugt, gestartet, unterbrochen, beendet? Was passiert, wenn mehrere Threads auf die gleichen Daten zugreifen? Wie lassen sich kritische Bereich absichern? Anhand von Beispielcode, Hinweisen und Fallstricken führen sie den Leser in die Thematik ein.
Den zweiten Teil bezeichnen sie als weiterführende Konzepte. Hier geht es beispielsweise um Threadpools, Synchronisationsobjekte wie Locks oder Atomic-Variablen. Anschließend beschäftigen sie sich mit dem Austausch von Daten zwischen unterschiedlichen Threads mittels Exchanger, Queue, Barrieren bis hin zum Phaser, der einige Konzepte kombiniert. Teil vier schließlich behandelt Parallelisierungsframeworks. Hier folgen die Autoren ein wenig der Java-Historie. Nachdem sie bereits weiter vorn im Buch die Executors beschrieben haben, geht es hier erst um das darauf aufsetzende ForkJoin-Framework, die Nutzung in der parallelen Stream-Verarbeitung bis hin zu CompletableFuture.
So erfährt der Leser nach und nach und aufeinander aufbauend alle Grundlagen zur nebenläufigen Programmierung mit Java. Dies ist dabei so aufgebaut, dass lediglich Java-Kentnisse vorausgesetzt werden. Die Parallelisierung lernt der Leser in dem Buch.
Doch was nutzen all die vielen Codebeispiele, die einfach nur dazu dienen, Konzepte einzuführen? Erst durch ihre Anwendung, durch die Praxis wird der Leser selbst zu einem Multicore-Programmierer. Auch hier bieten die Autoren Unterstützung. Der letzte Teil zeigt einige Fallbeispiele auf. Manche wie das Philosophen-Problem dienen eher der Veranschaulichung und Anwendung der Konzepte, anderes wie das zentrale Logging lässt sich aber direkt in der Praxis nutzen.
Gute deutsche Bücher zur nebenläufigen Programmierung mit Java sind recht rar gestreut. Hier gilt das Buch von Oechsle als eines der Standardwerke. Das vorliegende Werk setzt einen etwas anderen Schwerpunkt und scheint für Einsteiger fast noch besser geeignet. Und es hat es nach Meinung des Rezensenten das Potenzial, ebenfalls in die Liga der Standardwerke vorzudringen. Mindestens ist es eines der besseren deutschen Bücher zu diesem Thema.
Michael MĂĽller
ist als Bereichsleiter Softwareentwicklung der InEK GmbH verantwortlich für Projekte im Web-, Java- und .NET-Umfeld. Daneben betätigt er sich als freier Autor und verfasst Fachartikel zu diversen Entwicklungsthemen sowie Buchrezensionen.
(ane)