Concurrency Crossroads: Choosing between Reactive Programming and Virtual Threads in Quarkus
Willem Jan Glerum
J-Fall 2025
Conference
2025-11-06
Willem Jan
Glerum
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
2
Quick
Summary
Introduction
Blocking I/O
Reactive Programming
Virtual Threads
Quarkus Demo
Comparison
Conclusions
Presentation / Virtual Threads vs Reactive Programming in Quarkus
01
02
03
04
05
//
06
07
3
Introduction
01
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
4
Timeline
History
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
5
Blocking
02
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
6
I/O
Presentation / Virtual Threads vs Reactive Programming in Quarkus
I/O (Input/Output) is everywhere:
//
7
Blocking I/O
Wait forever
Presentation / Virtual Threads vs�Reactive Programming in Quarkus
//
8
Platform threads
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
9
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
10
Reactive
03
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
11
Presentation / Virtual Threads vs Reactive Programming in Quarkus
https://quarkus.io/guides/quarkus-reactive-architecture
//
12
Reactive
Systems
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
13
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
14
Unification
of Imperative and Reactive
Presentation / Virtual Threads vs Reactive Programming in Quarkus
Quarkus allows you to do both blocking and non-blocking code in the same application
//
15
Presentation / Virtual Threads vs Reactive Programming in Quarkus
https://quarkus.io/guides/quarkus-reactive-architecture
//
16
Presentation / Virtual Threads vs Reactive Programming in Quarkus
https://quarkus.io/guides/quarkus-reactive-architecture
//
17
Reactive programming
Your options
Presentation / Virtual Threads vs Reactive Programming in Quarkus
Multiple options available in Quarkus:
Or use Kotlin coroutines with suspend functions
//
18
Mutiny
Uni & Multi
Presentation / Virtual Threads vs Reactive Programming in Quarkus
Mutiny is a reactive programming library
Similar to Mono and Flux from Spring WebFlux
//
19
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
20
Quarkus
Extensions
Presentation / Virtual Threads vs Reactive Programming in Quarkus
Reactive extensions:
Find more here:
//
21
Virtual
Threads
04
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
22
Virtual Threads
To the rescue
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
23
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
24
Pinning
& synchronized
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
25
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
26
Pinning
And solutions
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
27
Monopolization
with CPU load
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
28
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
29
Virtual Threads
And testing
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
30
Structured
Concurrency
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
31
Comparison
06
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
32
Presentation / Virtual Threads vs Reactive Programming in Quarkus
Blocking
| Reactive
| Virtual Threads
|
//
33
Conclusions
07
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
34
Conclusions
Which one do you pick?
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
35
References
Presentation / Virtual Threads vs Reactive Programming in Quarkus
//
36
Thank you
for attending!
willem.jan.glerum@lunatech.nl
https://github.com/wjglerum