Java 19 Virtual Thread — Bạn có nên sử dụng nó không?
Blog này là Phần 1 của loạt bài gồm 2 phần, giải thích các luồng ảo trong Java 19 là gì , các luồng ảo có thể cải thiện hiệu suất ứng dụng như thế nào và cuối cùng là một số đo điểm chuẩn bằng các luồng ảo.
Chủ đề ảo là gì:
Vì ChatGPT là Google mới , hãy hỏi nó về định nghĩa của “Chủ đề ảo trong Java19" (mỗi lần nó đưa ra các định nghĩa khác nhau và có ý nghĩa, xin chúc mừng những người tạo ra vẻ đẹp này !!!)
Luồng ảo là một loại luồng nhẹ trong Java 19. Luồng ảo cho phép người dùng tạo một số lượng lớn luồng mà không gặp phải chi phí hoạt động liên quan đến luồng truyền thống. Các luồng ảo được quản lý bởi Máy ảo Java, vì vậy chúng có thể được sử dụng lại khi cần và cho phép cải thiện hiệu suất đáng kể khi so sánh với việc sử dụng các luồng gốc truyền thống.
Những người yêu thích F hoặc GoLang ngoài kia, những chủ đề ảo để đi theo thói quen không gì khác ngoài 'Anh trai từ mẹ khác'
Tại sao chủ đề ảo lại hữu ích
Các luồng ảo Java khác với các luồng nền tảng ban đầu theo nghĩa là các luồng ảo nhẹ hơn nhiều về số lượng tài nguyên (RAM) mà chúng yêu cầu từ hệ thống để chạy . Do đó, bạn có thể có nhiều luồng ảo hơn đang chạy trong các ứng dụng của mình so với các luồng nền tảng. Đồng thời, mang lại cho bạn toàn bộ lợi ích của chuỗi nền tảng thông thường.
Sử dụng chủ đề ảo
Tạo một thread ảo trong java cũng tương tự như tạo một Runnable thread thông thường. Tuy nhiên, chúng ta sẽ sử dụng lớp Executor, để tạo newVirtualThreadPerTaskExecutor (), bắt đầu một Chủ đề ảo mới cho mỗi tác vụ. Số lượng chủ đề được tạo bởi Executor là không giới hạn.
Bài kiểm tra
Trong thử nghiệm này, tôi sẽ gọi một dịch vụ bên ngoài (mất 1 mili giây để phản hồi) và thực hiện thao tác này 1 triệu lần bằng cả nền tảng thông thường và luồng ảo.
Mục đích:
Để so sánh thời gian thực hiện bởi các luồng ảo so với các luồng thông thường để hoàn thành thao tác 1 triệu lần.
Thông số máy: 10 nhân, bộ nhớ 16GB.
Mã số :
chủ đề thông thường
Tôi chỉ có thể sử dụng tối đa 1000 luồng nữa và tôi đã gặp lỗi OOM.
Chủ đề ảo
Kết quả :
Dưới đây là mức sử dụng CPU + Thời gian của cả hai phương pháp để chạy vòng lặp for bên ngoài 10 lần.
chủ đề thông thường
chủ đề ảo
Phần kết luận :
Chênh lệch thời gian b/w việc sử dụng các luồng thông thường so với giao diện ảo mang lại cho chúng tôi lợi thế rõ ràng khi sử dụng các luồng ảo trong trường hợp chúng tôi đang chờ một số dịch vụ bên ngoài. Nếu chúng ta ngoại suy ví dụ này thành 10 triệu hoặc 100 triệu cuộc gọi, thì sự khác biệt sẽ tăng lên đáng kể và các luồng ảo nổi lên là hoạt động tốt hơn khi ứng dụng liên quan đến việc chờ một số ứng dụng bên ngoài.
Ví dụ này bắt chước cách gọi của một dịch vụ bên ngoài bằng cách sử dụng Thread.sleep(), có thể được thay thế bằng một lệnh gọi thực sự đến một dịch vụ bên ngoài. Điều này được để lại như một bài tập cho người đọc. LÀM ĐI!!!
LƯU Ý: Đúng là bằng cách thử và sai, chúng tôi có thể tối ưu hóa số lượng tạo chuỗi thông thường, mặc dù sẽ không thể dự đoán số lượng chuỗi hoàn hảo cho mọi trường hợp sử dụng (nếu bạn ngẫu nhiên giữ một nhóm có chuỗi cao hơn , bạn đang lãng phí tài nguyên ứng dụng một cách không cần thiết). Sử dụng phân bổ động các luồng (luồng ảo) có ý nghĩa hơn nhiều trong ứng dụng trong thế giới thực.
Sự cố khi sử dụng Chủ đề ảo
Ví dụ trên vừa giúp bạn nhận ra rằng luồng ảo là một vấn đề hấp dẫn và để tăng tốc các ứng dụng của bạn cũng như để sử dụng tối ưu CPU của bạn, chúng ta phải luôn tạo các luồng ảo.
Giá như, mọi thứ không đi kèm với chữ “ NHƯNG ”.
Các luồng ảo trong Java rất tốt nhưng trong trường hợp nếu ứng dụng của bạn không bị ràng buộc I/O, tức là nếu bản thân CPU cần thực hiện một số xử lý nặng (như đào tạo một mô hình hoặc đếm đến 100 triệu), thì sử dụng các luồng ảo không phải là lựa chọn lý tưởng.
Các chi tiết của điều này sẽ được đưa ra trong phần 2 của bài viết này. Giữ nguyên!!!
suy nghĩ cuối cùng
Giới thiệu về hệ thống Java 19 vẫn đang trong giai đoạn phát triển (do dự án Loom hiện chỉ ở giai đoạn xem trước), mặc dù chúng tôi hy vọng sẽ thấy những cải tiến to lớn trong quản lý máy chủ, thời gian phản hồi API nhanh hơn và các sự cố OOM ít gặp hơn.
Giới thiệu về tác giả :
Yash Bansal là Phó kỹ sư chính tại RedBus. Thông tin thêm về anh ấy có thể được tìm thấy trên hồ sơ LinkedIn của anh ấy .

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































