Since my first post on Helidon and virtual threads a few things have happened. Helidon published an RC1 and bumped their v4 branch to RC2. Also, Java 21, an LTS with first class support for virtual threads, was released. No more need to enable preview!

So I created a new module and updated to the latest version of Helidon and Java. The main changes here included updating of versions, removing "--enable-preview", and sync'ing with the Helidon changes that replaced their webserver with Nima and got rid of the "nima" group/artifact/packaging.

Thereafter, I wanted to get a quick benchmark in. I found this repository that has a basic "Hello World" benchmark. I created a quick fork, added a Helidon example, and ran the benchmark on my laptop. The results were a whopping 1.3M req/sec! Placing Helidon in third place in the current rankings. Note, this simple example did not include any configuration or tuning. Not too shabby.

wrk -t4 -c128 -d30s http://localhost:8080 -s pipeline.lua --latency -- / 50 ✱

Running 30s test @ http://localhost:8080
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 2.77ms 2.88ms 95.69ms 94.93%
Req/Sec 327.07k 27.75k 377.34k 94.83%
Latency Distribution
50% 2.61ms
75% 3.83ms
90% 4.67ms
99% 0.00us
39056908 requests in 30.02s, 5.64GB read
Requests/sec: 1301104.00
Transfer/sec: 192.33MB

My guess is a benchmark that included I/O would be informative.

One other note. I tried compiling a native image with GraalVM and re-running the benchmark. The startup time was impressive - going from 121ms to 9ms. However, the benchmark unexpectedly degraded.

Helidon 4RC1, Java 21, and Virtual Threads Pt. 2 - A benchmark