© oatawa/Shutterstock.com
Project Loom: Besser skalieren durch virtuelle Threads

Blick in die fernere Zukunft


Das Project Loom ist eine experimentelle Version des JDKs. Es erweitert Java um virtuelle Threads, die leichtgewichtige Nebenläufigkeit erlauben. Preview Releases sind schon jetzt verfügbar und zeigen, was möglich ist.

Serverseitige Java-Applikationen sollten in der Lage sein, viele Requests parallel abzuarbeiten. Das Modell, das in der serverseitigen Java-Programmierung bis heute am verbreitetsten ist, ist Thread-per-Request. Hierbei wird einem eingehenden Request ein Thread zugeordnet und alles, was getan werden muss, um mit einer passenden Response zu antworten, wird auf diesem Thread abgearbeitet. Allerdings schränkt das die maximale Anzahl nebenläufig bearbeiteter Requests stark ein. Denn die Java-Threads, die jeweils einen nativen Betriebssystemthread beanspruchen, sind keine Leichtgewichte. Zum einen wegen des Speicherbedarfs: Jeder einzelne Thread beansprucht standardmäßig mehr als ein Megabyte Speicher. Zum anderen wegen der Kosten für den Wechsel zwischen den Threads, dem Context Switch.

Als Reaktion auf diese Nachteile sind in den letzten Jahren viele asynchrone Libraries, die zum Beispiel CompletableFutures verwenden, aber auch ganze „reactive“ Frameworks, wie z. B. RxJava [1], Reactor [2] oder Akka Streams [3] entstanden. Zwar nutzen sie allesamt die Ressourcen weit effektiver, fordern den Entwickler aber auf, sich auf ein deutlich anderes Programmiermodell umzustellen. Hierbei stöhnen einige über den kognitiven Ballast, da sie lieber wie gewohnt sequenziell auflisten, was das Programm tun soll, statt mit Callbacks, Observables oder Flows zu hantieren. Hier stellt sich die Frage, ob es nicht möglich wäre, die Vorteile beider Welten zu vereinen: So effektiv wie die asynchrone Programmierung und dennoch in gewohnter, sequenzieller Befehlsabfolge programmieren können. Das Project Loom [4] von Oracle will mit einem modifizierten JDK genau diese Option erkunden. Es bringt zum einen ein neues, leichtes Konstrukt für die Nebenläufigkeit mit, nämlich die virtuellen Threads, und zum anderen eine angepasste Standardbibliothek, die auf diesen aufsetzt.

Virtual Threads

Erinnert sich noch jemand an Multithreading in Java 1.1? Damals kannte Java nur sogenannte Green Threads. Die Möglichkeit, mehrere Betriebssystemthreads zu verwenden, wurde gar nicht genutzt. Threads wurden lediglich innerhalb der JVM emuliert. Ab Java 1.2 wurde schließlich für jeden Java-Thread auch wirklich ein nativer Betriebssystemthread gestartet.

Jetzt feiern die Green Threads ein R...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang