When Treads Unravel

Buchtipp: Seven Concurrency Models in Seven Weeks

Michael Müller

Bruce Tate hat vor wenigen Jahren mit Seven Languages in Seven Weeks eine erfolgreiche Buchreihe gestartet, die dem Leser immer wieder unterschiedliche Systeme in sieben Wochen nahebringt und die er als Editor begleitet. Diesmal geht es um sieben Modelle nebenläufiger sowie paralleler Programmierung, ein Thema, welches im Zeitalter der Multicore-Computer rapide an Bedeutung, wie auch Interesses gewonnen hat. Dabei sind die Ansprüche an den Leser recht hoch: Zwar liefern manche Programmiersprachen mehrere Modelle für die Multicore-Programmierung, doch für sieben unterschiedliche reicht eine Sprache dann doch nicht aus. Doch bietet der Autor das Nötige an, damit der erfahrene Leser sich in für ihn möglicherweise unbekannte Sprachen soweit einarbeiten kann, dass er die Konzepte der jeweils gezeigten Concurrency-Modelle verstehen kann.

Autor(en)

Paul Butcher

Titel

Seven Concurrency Models in Seven Weeks

Untertitel

When Treads Unravel

Seiten

296

Preis

38 US-Dollar

Verlag

Pragmatic Bookshelf

Jahr

2014

ISBN

978-1-93778-565-9

Zu Beginn des Buchs geht der Autor kurz auf die Unterscheidung von nebenläufiger (concurrent) und paralleler Ausführung ein. Und im weiteren Verlauf des Buchs wird beides behandelt. Dabei startet er recht sanft mit Threads und Locks in Java. Als eine Beispielanwendung, die er im Laufe des Buchs immer wieder anders implementiert, dient das Fünf-Philosophen-Problem: Diese fünf Personen haben zwischen sich jeweils ein Stäbchen liegen. Sie denken eine Weile und werden darüber hungrig. Um essen zu können, benötigen sie sowohl das Stäbchen rechts wie jenes links von sich. Was aber, wenn alle ihr rechtes Stäbchen nehmen? Das ist gleichzeitig das linke Stäbchen des rechten Nachbarn. Somit steht keinem mehr ein linkes Stäbchen zur Verfügung. Und wenn alle ihr Stäbchen festhalten und warten, bis auf der anderen Seite eines frei wird, so warten sie ewig. Der Deadlock ist leicht ersichtlich, die Lösung nicht unbedingt trivial. Auch simple Konstrukte, wie unterschiedliche Locks und andere Formen der Synchronisation, z. B. Queues, wollen richtig verwendet werden.

Doch nach diesem Start verlässt Paul Butcher Java, auch wenn er noch auf der JVM verweilt: Die funktionale Programmierung, hier am Beispiel Clojure, bietet durch die Vermeidung veränderlicher Variablen auf einfache Weise andere Möglichkeiten. Wird kein veränderlicher, gemeinsamer Status genutzt, so entstehen bestimmte Probleme erst gar nicht und es kann auf eine Synchronisation verzichtet werden. Doch Clojure ist keine pure funktionale Sprache; vielmehr bietet sie auch veränderliche Variablen. Wie mit Atoms und Agents nebenläufig programmiert werden kann, zeigt Butcher im Rahmen der Separierung von Identität und Status.

Mit Erlang sind Aktoren populär geworden. Butcher zeigt diese anhand von Elixir, einer Sprache, die auf der Erlang Virtual Machine verfügbar ist. Hier werden munter Nachrichten verschickt, um so die Kommunikation gleichzeitig agierender Aktoren zu realisieren. Kommunikation spielt ebenfalls im Kapitel Communicating Sequential Processes eine Rolle. Hier geht es um Kanäle und Go Blocks am Beispiel von Clojures core.aysync-Bibliothek.

Danach wird es dann richtig parallel: Ein Supercomputer, bestehend aus mehreren hundert oder gar tausend Prozessoren bearbeitet gleichzeitig Daten mit demselben Programm. Nun, es handelt sich dabei um den Grafikprozessor eines handelsüblichen PCs. Tausende Bildpunkte gleichzeitig ändern, kann er von Haus aus. Und dies lässt sich durchaus für das eigene Numbercrunching nutzen. Butcher zeigt dies anhand von OpenCL, das erlaubt, die GPU in C-ähnlicher Manier anzusprechen – oder, wie er ebenfalls zeigt – über eine Java-Bibliothek als Wrapper.

Und zum Schluss verlässt er die einzelne Maschine und zeigt am Beispiel Hadoop, wie mittels eines verteilten Systems Map- und Reduce-Algorithmen auf große Datenstrukturen angewendet werden, und unterschiedlich alte Daten behandelt werden (Batch- und Speed-Layer), um dem Anwender eine aktuelle Sicht zu bieten.

Das Buch bietet keine einfache Einführung in die speziellen Belange der parallelen und nebenläufigen Programmierung, sondern reißt nur einige der grundlegenden Probleme an. Insofern ist es recht anspruchsvoll und setzt beim Leser auch in diesem Bereich ein gewisses Grundwissen voraus. Ziel ist vielmehr, den Horizont des Experten nochmals zu erweitern und alternative Modelle aufzuzeigen, um so auch mal eingetretene Pfade verlassen zu können. Und dies gelingt Butcher sehr schön.

Geschrieben von
Michael Müller
Michael Müller
Michael Müller verfügt über mehr als 30 Jahre Erfahrung in Softwareentwicklung, Training und Consulting, davon rund 25 Jahre im Gesundheitswesen. Er leitet den Bereich Softwareentwicklung bei der InEK GmbH. Daneben betätigt er sich als freier Autor und Blogger. Er ist Mitglied der JSF Expert-Group, des NetBeans Dream Team sowie der JUG Cologne.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: