Donnerstag, 24. Mai 2012 |
| |
Brian Goetz, Autor des Buches "Java Concurrency In Practice" und Specification Lead für JSRs 166 (concurrency utilities), 107 (caching) und 305 (annotations for safety analysis), war Keynote-Speaker auf der JAX. Dies bot die Gelegenheit, ein kurzes Gespräch mit ihm zu führen.
Mit den Multi-Core-Prozessoren der größten Anbieter wird Hardware wieder ein Thema für Software-Entwickler und -Architekten. Findest Du, dass das nur ein Technologie-Detail ist oder ist es vielleicht mehr als das – wohlmöglich ein neues Paradigma für Software?
Brian Goetz: Ja und noch mal ja. :-)
Da die Multi-Prozessor-Technologie den Markt mehr und mehr durchdringt, sollte sie eigentlich die meisten Entwickler betreffen, allerdings ist das Ausmaß unterschiedlich. Für manche Entwickler werden die heutigen neuen Multi-Core-Systeme ihre Arbeits- und Denkweise in Bezug auf EDV ändern, aber das ist eher die Minderheit. Für die Mehrheit werden Themen wie etwa Threadsicherheit und Skalierbarkeit zum allgemeinen Gedankengut werden müssen, aber es kann gut sein, dass für diese Entwickler einfache Techniken und bessere Frameworks ausreichen, um den neuen Anforderungen gerecht zu werden.
Welchen Herausforderungen muss man sich in einer Multi-Core-Welt stellen?
Brian Goetz: Für Java-Entwickler ist die Antwort auf diese Frage vielleicht „keinen neuen“, da Java vom ersten Tag an Threads unterstützt hat. In der Realität haben sich für Java-Entwickler zwei Dinge geändert: 1. Wenn du alle CPU-Zyklen benutzen willst, für die du gezahlt hast, musst du Threads benutzen. 2. Viele Programmierfehler, die bislang unentdeckt geblieben sind, weil die meisten Programme auf Single-Prozessor-Systemen liefen, treten nun häufiger in Erscheinung, da die neueren Systeme eine richtige Concurrency liefern.
Welche Art von Fähigkeiten werden gebraucht, um die beste Leistung für Enterprise-Anwendungen zu erzielen? Was sollten Entwickler lernen?
Brian Goetz: Im Idealfall werden die meisten Entwickler in der Lage sein, die Frameworks zu nutzen, die Dinge wie etwa Task Scheduling für sie erledigen. Diese Frameworks setzen voraus, dass der Entwickler die Tasks vernünftig abgrenzt – die Arbeit in überschaubare Teile aufgesplittet – aber ansonsten wird das meiste in Sachen Scheduling vom Framework übernommen. Die andere wichtige Anpassung besteht darin, dass die Entwickler sich mehr darüber bewusst sein müssen, welche Teile ihres Programms gemeinsam genutzt werden, da die meisten Probleme mit Concurrency von der Notwendigkeit der Koordination dieser gemeinsamen Nutzung herrühren.
Welche Art von Anwendungen können für Multi-Core-Architekturen optimiert werden, und gibt es welche, die nicht optimiert werden können?
Brian Goetz: Die Durchlaufleistung in nebenläufigen Systemen wird vom Amadahl’s Gesetz bestimmt, die eine Task in serielle und parallelisierbare Partien aufteilt. Die meisten Probleme bestehen aus einer Mischung von beiden. Man kann Früchte z.B. mit mehr Leuten schneller ernten, aber mehr Menschen werden die Früchte nicht schneller wachsen lassen. Der „wachsende“ Teil ist hauptsächlich seriell und derartige Tasks können dadurch, dass man mehr Prozessoren mit dem Problem beschäftigt, nicht beschleunigt werden. In der Praxis gibt es für viele Probleme eine parallele Lösung, aber existierende Implementierungen müssen eventuell refaktoriert werden, um die latente Parallelität zu offenbaren. Dieses Refactoring sieht in der Regel so aus, dass monolithische Kalkulationen vorgenommen werden müssen.
Vielen Dank für das Gespräch!
Die Fragen stellte Java Magazin Chefredakteur Sebastian Meyen.