Nebenläufigkeit ist aus modernen Softwaresystemen nicht mehr wegzudenken.
Sei es, um Performancesteigerungen durch paralleles Ausführen auf mehreren
Prozessorkernen zu erzielen, oder weil das zugrundeliegende Problem
inherent nebenläufig ist. In einem
anderen Blogartikel haben wir uns
bereits mit der Parallelisierung von Programmen bzw. Algorithmen
beschäftig.
Heute soll es nun um echte Nebenläufigkeit gehen. Mit „echter Nebenläufigkeit“
meine ich, dass die Nebenläufigkeit nicht Mittel zum Zweck ist, sondern
im zu lösenden Problem schon drinsteckt. Ein gutes Beispiel ist z.B.
ein Webserver, der quasi gleichzeitig Anfragen von verschiedenen Clients
beantwortet. Um einen solchen Webserver zu programmieren, ist
Nebenläufigkeit ein gutes Modell: jeder Client wird als separater Thread
programmiert und kann damit isoliert betrachtet werden.
Jeder der schon einmal ein nebenläufiges Programm geschrieben hat, weiß
allerdings wie
schwer es sein kann, Daten zwischen verschiedenen Threads auszutauschen:
Race Conditions und Deadlocks sind oft die Folge. In diesem Artikel geht
es um „Software Transactional Memory“, kurz STM, einer alternativen
Technik zur Kommunikation zwischen Threads. Wir setzen in der Serverkomponente
unseres Produkts CheckpadMED
ausschließlich auf STM zur Kommunikation zwischen Threads und sind damit
sehr zufrieden. STM ist sprachunabhängig und steht für eine Vielzahl
von funktionalen Sprachen (z.B. Clojure,
Haskell,
OCaml,
Scala)
und anderen Sprache
(z.B. C/C++,
C#,
Java) zur Verfügung.
Funktionale Sprachen scheinen aber für den Einsatz von STM deutlich
besser gerüstet zu sein, da dort unveränderbare Datenstrukturen und der
Verzicht auf global-veränderbare Variablen Standard sind. In diesem
Artikel zeigen wir, wie STM in Haskell funktioniert, die Konzepte
sind aber in den anderen Sprachen sehr ähnlich und übertragbar.
Weiterlesen...