Das Javascript-Framework node.js ist eine auf Googles
V8 Engine basierende Platform
zur Erstellung von performanten und skalierbaren Netzwerkprogrammen.
Dabei laufen node.js Programme, anders als mit Javascript sonst üblich,
auf der Serverseite.
Die gute
Performance von node.js bei Netzwerkoperationen beruht vor allem auf der
Nutzung von asynchronen Programmierschnittstellen.
Allerdings machen solche Programmierschnittstellen den Entwicklern das Leben
unnötigerweise schwer und tragen nicht gerade zur guten Wartbarkeit des Codes bei.
Wir werden im Verlauf des Artikels noch sehen warum dem so ist.
Der heutige Blogartikel zeigt, dass sich mit der funktionalen Programmiersprache
Haskell Netzwerkprogramme mit
deutlich besserer Performance als mit node.js schreiben lassen, ohne dass dabei
auf ein asynchrones Programmiermodell zurückgegriffen werden muss.
Stattdessen wird im üblichen, sequenziellen Stil programmiert und das
Laufzeitsystem kümmert sich um die performante Umsetzung auf
asynchrone Primitivoperationen.
Der verwendete Benchmark ist eine einfache Serverapplikation, die jede vom Client
geschickte Zahl verdoppelt und das Ergebnis an den Client zurückschickt. Mit diesem
Benchmark ist das vorgestellte Haskellprogramm im Durchschnitt um Faktor 1,6
schneller als das entsprechende node.js Programm, bei Rückgriff auf eine experimentelle
node.js Erweiterung zur Nutzung mehrerer Prozessorkerne schmilzt der Vorsprung
der Haskell-Version auf Faktor 1,04, allerdings bringt diese Erweiterung von node.js
andere Nachteile mit sich.
Am Ende des Artikels lesen Sie,
mit welchen Tricks das Haskell-Laufzeitsystem diesen Speedup erzielt.
Ein paar grundlegende Haskell-Kenntnisse schaden zum Verständnis des Artikels
nicht, vielleicht möchten Sie sich ja mal unseren Einführungsartikel zu
Monaden, das programmierbare Semikolon anschauen.
Auch könnten die Artikel zu paralleler Programmierung in Haskell
und zur Webprogrammierung in Haskell
für Sie interessant sein.
Weiterlesen...