Wenn man sich auf IT-Blogs und Konferenzen tummelt ist immer wieder die Rede von Concurrency, und wie wichtig das in Zukunft wird. Fakt ist sicherlich das Moorsche Gesetz in seiner alten Form ist am Ende. Wir werden uns mit immer mehr Kernen in unseren CPUs herumschlagen müssen. Fakt ist aber auch: Datenbanken und Webserver mit vielen Usern sind schon super parallelisiert. Bleiben die Clientrechner, und Webanwendungen bzw. Datenbanken mit nur wenigen Benutzern.

Ich denke im ersten Schritt wird das, was schon seit jeher zu den Best Practices gehört wichtiger: Lang laufende Aktionen werden in ihren eigenen Thread ausgelagert, damit der Benutzer nicht auf die Abarbeitung warten muss. Aber dies lastet die Prozessoren noch nicht besser aus, denn die lang laufenden Aktionen laufen lange, weil auf Ressourcen gewartet wird: Die Antwort vom Web Service, von der Datenbank oder vom Filesystem. Das ganze wird nur fixer, weil man auf drei Dinge gleichzeitig warten kann. Aber warten kann schon eine CPU mit einem Kern ziemlich gut auf ziemlich viele Dinge.Die eigentliche Frage: Was tun mit den andere Prozessoren / Kernen bleibt also. Ich sehe zur Zeit zwei Alternativen:

  •  Wir finden keine gute Antwort auf die Frage. Dies wäre in der Tat fatal, denn das Moorsche Gesetz treibt die gesamte IT Industrie! Warum soll ich mir einen neuen Rechner kaufen, wenn die Software so schnell läuft wie auf dem alten? Warum soll ich mir neue Software kaufen, wenn die auch nicht mehr kann als die alte, da sie die gleichen Ressourcen zur Verfügung hat wie die alte? Ich halte diese Bedrohung für durchaus ernst und wundere mich, dass ich diesen Gedanken noch nirgends so gelesen habe.
  • Wir tun komplexere Dinge. Der größte Teil der der Anwendungen, die wir schreiben ist doch erschreckend banal: Benutzer gibt Daten ein, wir schubsen die Daten von hier nach da, drehen sie auf links und schreiben sie schließlich in eine Datenbank. Wirklich komplexe Aufgaben wie Optimierungsprobleme oder Simulationen, anspruchsvolle 3D-Visualisierungen von Daten, stehen bei den meisten Entwicklern nur sehr selten im Pflichtenheft. Das hat zweierlei Gründe. Einerseits sind nur wenige Entwickler von 'Enterprise Applications' in der Lage solche Probleme zu lösen, andererseits ist die Hardware schon mit den einfachen Dingen komplett ausgelastet. Aber letzteres wird sich ändern. Auf einem normalen PC werden wir schon bald ein Dutzend Prozessorkerne haben, die nicht richtig ausgelastet sind. Wenn wir dem Kunden neue Versionen unserer Software verkaufen wollen, müssen wir ihm zeigen, dass wir mit dieser Rechenleistung etwas anfangen können. Berechnungen und Optimierungen, die wir bisher als nicht handhabbar abgetan haben, und dem Benutzer überlassen haben, müssen wir uns krallen, in parallel verarbeitbare Algorithmen gießen, nett visualisieren und in die Anwendung integrieren.


Daher meine apokalyptische Prophezeiung: Wer als Software Entwickler in 10 Jahren noch einen Job haben will, sollte hoffen dass Java sich zum nächsten Cobol entwickelt, und für Leute mit veraltetem Wissen viel Geld bezahlt wird, oder sie sollte sich schon mal an nicht triviale Algorithmen herantasten.