Kommentare zu: Virtuelle Threads in Java – Deep Dive mit Beispielen https://www.happycoders.eu/de/java/virtual-threads/ Wed, 09 Apr 2025 10:21:41 +0000 hourly 1 Von: Sven Woltmann https://www.happycoders.eu/de/java/virtual-threads/#comment-23734 Mon, 19 Feb 2024 13:15:11 +0000 https://www.happycoders.eu/?p=31531#comment-23734 Als Antwort auf D. Boles.

Hallo nochmal!

Wenn man die `System.out`-Ausgaben entfernt, komme ich bei 100.000 Tasks auf folgende Messwerte:

* Executors.newVirtualThreadPerTaskExecutor(): 2534 ms
* Executors.newCachedThreadPool(): 5363 ms

Wenn man allerdings die Zeit nach dem Ende des try-catch-Blocks misst, also die notwendigen Aufräumarbeiten mit einbezieht, dann komme ich auf folgende Werte:

* Executors.newVirtualThreadPerTaskExecutor(): 2539 ms
* Executors.newCachedThreadPool(): 19350 ms

Das ist doch ein deutlicher Unterschied!

Darüberhinaus ist bei der Verwendung von Plattform-Threads während des Tests die CPU-Last auf 100% und mein Laptop quasi unbrauchbar, während bei virtuellen Threads die CPU-Last nur auf etwa 25% geht.

Und das funktioniert so auch nur unter Windows, weil das ein ziemlich gutes Thread-Handling hat und weniger Speicher für den Stack committed als Linux.

Wenn ich 100.000 Tasks mit Platform-Threads unter Linux ausprobiere, kommt es relativ schnell zum "java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached"

Viele Grüße
Sven

]]>
Von: Sven Woltmann https://www.happycoders.eu/de/java/virtual-threads/#comment-23732 Mon, 19 Feb 2024 12:53:36 +0000 https://www.happycoders.eu/?p=31531#comment-23732 Als Antwort auf D. Boles.

Hallo, bei 1000 Tasks macht es tatsächlich keinen Unterschied. Ich kann z. B. auf meinem Laptop einigermaßen sicher 20.000 Plattform-Threads laufen lassen. Dabei ist allerdings dann auch die CPU zu 100% ausgelastet. Dagegen kann ich locker 20.000.000 virtuelle Threads laufen lassen.

]]>
Von: D. Boles https://www.happycoders.eu/de/java/virtual-threads/#comment-23114 Tue, 23 Jan 2024 10:00:18 +0000 https://www.happycoders.eu/?p=31531#comment-23114 Ergänzung: Auch bei 100_000 Tasks und Nutzung von Executors.newCachedThreadPool() erhalte ich folgendes Ergebnis:
Virtual Threads: sum = 4937424; time = 7343 ms
Plattform-Thread: sum = 4970828; time = 8366 ms
d.h. Platform-Threads sind nahezu gleich schnell!?

]]>
Von: D. Boles https://www.happycoders.eu/de/java/virtual-threads/#comment-23113 Tue, 23 Jan 2024 09:32:02 +0000 https://www.happycoders.eu/?p=31531#comment-23113 Das Beispiel oben ist irgendwie verfälschend. Wenn ich "Executors.newFixedThreadPool(100)" durch Executors.newCachedThreadPool() ersetze, also wahrscheinlich 1000 Plattform-Threads nutze (analog zu den 1000 virtuellen Threads) sind beide Programme nahezu gleich schnell (ca. 1300 ms). Ich sehe da keinen Vorteil bei der Verwendung virtueller Threads!?

]]>