1. Lý do sinh ra virtual thread.
Những người dùng lâu năm, đặc biệt đối với những bạn sử dụng Java thì concurrency transaction đã là bài toán quen thuộc mà ai cũng đã từng trải, giúp chúng ta xây dựng nên những ứng dụng có tính scale cao, khả năng chịu tải tốt và phản hồi nhanh. Nhưng bù lại theo đó là kéo theo 1 đống bài toán về quản lý resource cấp cho thread một cách hiệu quả mà vẫn đảm bảo ứng dụng mượt mà. Tốt thay, Virtual Thread được jdk 19 cho ra đời và có thể sẽ là 1 giải pháp ổn định cho jdk21.
Nhưng trước khi bước vào giải thích virtual thread là gì, ngẫm lại cái thread làm gì đã nào: Khi chúng ta tạo 1 thread, chứa đống code mà chúng ta cần execute và 1 hàm start method. Khi chúng ta chạy start, OS sẽ tạo và start 1 thread phục vụ cho tiến trình của ứng dụng, và đồng thời JVM cũng tạo 1 không gian stack với size cố định để chứa các biến local. Cuối cùng, OS cũng sẽ chịu toàn bộ trách nhiệm để schedule và run thread trên CPU.
Về mặt bản chất thì thread cũng chỉ là 1 lớp bao quanh hệ điều hành (os). Và khi scale lên thì dễ thấy rằng cứ 1 thread lại map 1 - 1 vs 1 os thread và cũng ngốn luôn JVM đoạn fixed stack size.
OS-Level Monitoring và thử:
2. Virtual thread là gì và một số ưu điểm.
Vậy virtual thread giải quyết bài toán này như thế nào ?
Cũng giống thread, virtual thread code khởi tạo cũng na ná , bằng việc dùng thêm ofVirtual . Tuy nhiên, không giống như thread, virtual thread hoàn toàn được quản lý bởi JVM . Virtual thread lúc này giống như java object được khởi tạo trên bộ nhớ heap và được JVM garbage thu dọn sau khi xong việc. Vì thế không cần phải tốn chi phí để OS tạo và quản lý resource. Đi sâu hơn về bản chất, khi chúng ta tạo 1 virtual thread, dứoi JVM sẽ tự động tạo trước 1 thread pool và mount thread này vào thread pool.
Note: carrier thread là 1 os - managed thread được virtual thread mount vào khi tạo và khi thực hiện blocking Operation sẽ được unmount.
Testing:
Tổng kết:
Quản lý đồng thời resource hiệu quả hơn mà hệ thống không cần chịu gánh nặng quá nhiều tài nguyên. Có khả năng tạo hàng triệu thread với mức tài nguyên thấp Chạy trên JVM (không trên kernel như standard thread) cho phép tạo hàng triệu luồng mà không tốn nhiều bộ nhớ hay CPU.
=> Là một công cụ mạnh mẽ trong việc phát triển ứng dụng concurrency, async.
Ref:
https://medium.com/@coffeeandtips.tech/exploring-the-power-of-virtual-threads-in-java-21-29f83c88367c https://dev.to/elayachiabdelmajid/java-21-virtual-threads-1h5b#:~:text=Virtual threads are a relatively,concurrently%2C and the start method.