Oliver Heger Bosch Software Innovations

„Reaktive Programmierung kommt nicht zum Nulltarif. Es sind andere und mitunter ungewohnte Ansätze erforderlich, um unter Verzicht auf blockierende Aufrufe mit externen Diensten und Systemen zu kommunizieren und ihre Antworten zu koordinieren.“

Reaktive Programmierung verspricht, moderne Hardware effizient zu nutzen und den Anwender von lästigen Wartezeiten zu befreien. Doch sie hat ihren Preis: Sie stellt hohe Anforderungen an uns Entwickler und zwingt uns, ausgetretene Pfade zu verlassen. Dieser Artikel vergleicht den reaktiven Programmierstil mit dem herkömmlichen.

Es kann ein sehr zufriedenstellendes Gefühl sein, eine Aufgabenliste von oben nach unten abzuarbeiten. Man fokussiert sich exklusiv auf das, was gerade ansteht, und setzt anschließend einen Haken darunter. Offensichtlich führt solch ein rein serieller Ansatz nicht unbedingt zu optimalen Ergebnissen. Lautet eine der Aufgaben beispielsweise „Wäsche waschen“, macht es wenig Sinn, die Waschmaschine zu bestücken und dann gebannt durch das Bullauge zu starren, bis das Programm abgelaufen ist, während man doch nebenher bereits den Fußboden wischen könnte. Das andere Extrem besteht darin, eine Vielzahl von Aufgaben nahezu gleichzeitig zu starten, den Fortschritt zu überwachen und aktiv zu werden, sobald es erforderlich wird oder ein Ergebnis eintritt. Durch geschicktes Jonglieren mit den einzelnen Aktivitäten lässt sich die eigene Produktivität deutlich steigern – vorausgesetzt, Sie wissen noch, wo Ihnen der Kopf steht.

Die Analogie lässt sich ganz gut auf die Softwareentwicklung übertragen. Die meisten von uns werden wohl mit einem seriellen Ansatz aufgewachsen sein und sich damit am wohlsten fühlen. Ein Programm besteht aus einzelnen Anweisungen, die der Computer Schritt für Schritt ausführt. Das ist intuitiv, alle Ergebnisse liegen dann vor, wenn man sie braucht, und man muss sich nicht mit Nebenläufigkeit und anderen esoterischen Konzepten herumschlagen. Leider ist ein solches Vorgehen für moderne Hardware ähnlich ineffizient wie das Waschmaschinenanalogon. Aus der Sicht eines Prozessorkerns dauert eine I/O-Operation eine halbe Ewigkeit. Zeit, die er wesentlich sinnvoller nutzen könnte, als untätig auf das Eintreffen der Ergebnisse zu warten. Um den Anwender mit Software zufriedenzustellen, die auf seinem Rechner mit der erwarteten Geschwindigkeit läuft, müssen wir uns schon mehr anstrengen. Ein Lösungsansatz besteht darin, den Prozessor eben nicht warten zu lassen, sondern die Zeit bis zum Eintreffen der Daten mit alternativen Aufgaben zu überbrücken. Das erhöht natürlich den Koordinationsaufwand.

Dieser Artikel untersucht verschiedene Ansätze zur reaktiven Programmierung und ihren Einfluss auf die Komplexität des resultierenden Codes. Dabei werden sowohl Methoden betrachtet, die Java von sich aus mitbringt, als auch solche, die populäre Open-Source-Frameworks anbieten. Gegenstand der Untersuchung ist ein relativ einfacher Anwendungsfall: das Einlesen einer Datei.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Java Magazin 2.18 - "Reaktive Programmierung"

Alle Infos zum Heft
579824025Reactive Programing: Pros und Cons unterscheidlicher Ansätze
X
- Gib Deinen Standort ein -
- or -