- vừa được xem lúc

Virtual Thread trong lập trình hiện đại

0 0 5

Người đăng: MinhDrake

Theo Viblo Asia

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.

image.png

Standard thread

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.

image.png

Hạn chế và mặt scalability của standard thread

OS-Level Monitoring và thử: image.png

Tạo 1 standard thread run async

image.png

Dùng thêm join để run consecutively

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.

image.png

Virtual thread count in heap space

image.png

Mount and unmount thread

Testing:

image.png

Khởi tạo virtuad thread

image.png

Virtual thread được gắn vào thread pool

image.png

Chạy cùng lúc 20 virtual thread

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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Dự án OpenJDK Loom

1. Khái quát chung.

0 0 27

- vừa được xem lúc

Virtual Threads: Nền tảng mới cho ứng dụng Java quy mô lớn

Virtual threads là một dự án tham vọng trên nền tảng Java, được kì vọng sẽ cải thiện đáng kể cho các ứng dụng tải cao và là một trong những thay đổi lớn của kiến trúc JVM sau một thời gian dài. Những

0 0 29

- vừa được xem lúc

Java 21 – Virtual Thread cập nhập đáng giá kể từ Java 8 được nhiều chuyên gia ngóng chờ

Virtual threads trong Java 21 là gì . Hoặc có thể theo dõi Blog của mình tại dohv.stackgrowth.asia hoặc kênh Youtube của mình tại đây .

0 0 18

- vừa được xem lúc

Java Virtual Threads

Concurrency (tính đồng thời) từ lâu đã là một trong những vấn đề phức tạp và quan trọng trong phát triển phần mềm, đặc biệt là khi làm việc với các hệ thống cần xử lý nhiều tác vụ cùng lúc, chẳng hạn

0 0 5

- vừa được xem lúc

Tôi nói gì khi nói về Java virtual thread

Điều gì mang tôi đến với virtual thread. Là một backend developer, tôi bắt đầu sự nghiệp coding của mình bằng C++ rồi sau đó là Java, Js.

0 0 5

- vừa được xem lúc

Hướng dẫn finetune mô hình LLM đơn giản và miễn phí với Unsloth

Chào mừng các bạn đến với bài viết hướng dẫn chi tiết cách finetune (tinh chỉnh) một mô hình ngôn ngữ lớn (LLM) một cách đơn giản và hoàn toàn miễn phí sử dụng thư viện Unsloth. Trong bài viết này, ch

0 0 8