Nobody Talks About Project Loom
Autor
Marcus HeldHi,
Wieso spricht keiner über Project Loom?
Auf der JVM steht uns einer der größten Änderungen seit Jahren bevor.
Und sie beeinflusst massiv wie wir arbeiten.
Asynchronität ist schwer. Es muss über so viel nachgedacht werden:
Wie konfiguriere ich meinen Threadpool? Hat der Codepath mehr wait-time oder rechnet er lange? Und wie groß sollte die Queue vor dem Threadpool sein? Sind Spikes in dem Codepath zu erwarten?
Und wie bekomme ich eigentlich meine globalen State, wie den SecurityContext
oder den MDC darüber?
Achja, den Stacktrace verliere ich auch - damit ist das Debugging auch lästiger.
Und wenn ich vom “Thread-per-Request” Model zu einer reactive Implementierung (wie Webflux/Reactor) wechsle, dann wird es noch komplizierter. Die Implementierung entscheidet selbständig auf welchem Thread was ausgeführt wird. In diesem Setting sind Seiteneffekte super schwer nachzuvollziehen. Und jetzt sind die Threads nicht mehr für einzelne Pfade da - sondern für (fast) alles.
Das ist nicht simpler. Es ist komplizierter. Aber - am Ende performanter.
Und jetzt kommt Project Loom. Mit den virtuellen Threads können wir das alles vergessen 😱
Die sind so günstig. Sowohl in ihrem statischen Overhead als auch in ihrer Laufzeit. Es tut überhaupt nicht weh wenn sie warten. Du kannst millionen virtuelle Threads starten, sie alle schlafen lassen und einen einzigen ausführen. Du wirst es nicht merken. Die Implementierung ist schnell!
Das verändert fundamental wie wir unseren Code schreiben können.
Im alten, langweiligen “Thread-per-Request” Modell können wir plötzlich synchron programmieren.
Du musst einen Service per REST ansprechen? Egal - einfach synchron auf die Antwort warten.
Du brauchst Daten aus dem cold store Archiv? Egal - warten wir einfach bis er warm ist.
Und es ist so langweilig. Wir bleiben ja im gleichen Thread. Der Stacktrace ist vollständig. Die MVC Tags sind immer noch da - natürlich.
Das ist die größte Änderung für unser daily business seit langem.
Es wird so viel simpler. Die meisten Applikationen, die aus Performancegründen auf Webflux wechselten brauchen das nicht mehr.
Aber erstaunlicherweise ist es super ruhig darum.
Am 19ten September, mit Java 21 ist es soweit. Ich bin gespannt.
Rule the Backend,
~ Marcus