- #java
- #spring-boot
- #virtual-threads
- #webflux
- #concurrency
Spring Boot 3 + Virtual Threads: Khi nào nên chuyển từ WebFlux?Spring Boot 3 + Virtual Threads: When to Move Away from WebFlux
So sánh thực tế giữa WebFlux và Virtual Threads, hướng dẫn chuyển đổi và đưa ra quy tắc quyết định sử dụng.A practical comparison of WebFlux vs Virtual Threads, migration steps, and decision rules for using them.
Mục lụcContents· 9
Bạn vừa nhận được một ticket: "API hiện đang dùng Spring WebFlux nhưng phản hồi chậm khi tải dữ liệu từ PostgreSQL". Đội backend đang cân nhắc chuyển sang virtual threads của Java 21 để đơn giản hoá code và tận dụng các thư viện blocking hiện có. Nhưng liệu bỏ WebFlux có thực sự là bước đúng?
1. Virtual threads là gì?#
Virtual threads (còn gọi là fibers trong một số ngôn ngữ) là một lớp thread do JVM quản lý, nhẹ hơn hàng nghìn lần so với OS thread truyền thống. Mỗi virtual thread chỉ chiếm một vài kilobytes stack và được lập lịch bởi ForkJoinPool. Khi thread chờ I/O (đọc DB, gọi HTTP), JVM sẽ unpark thread thật và gán một virtual thread khác vào cùng một OS thread, vì vậy số lượng concurrent requests có thể lên tới hàng chục ngàn mà không gặp out‑of‑memory hay thread pool exhaustion.
Lưu ý: Virtual thread không thay thế hoàn toàn các mô hình reactive; chúng vẫn là blocking nhưng “non‑blocking” ở mức JVM.
2. WebFlux – ưu và nhược điểm#
WebFlux được thiết kế cho reactive streams. Khi bạn viết controller trả về Mono/Flux, mọi I/O đều phải non‑blocking