Tôi có một vấn đề với một ứng dụng đang chạy nhiều luồng Java. Ứng dụng chạy một số chuỗi làm việc liên tục nhìn vào hàng đợi nhập liệu và nếu có thư trong hàng đợi, chúng sẽ kéo chúng ra và xử lý chúng.Đa luồng Java trong tải CPU
Trong số các chuỗi làm việc đó, có một chuỗi xác minh khác được lên lịch để thực hiện tại một khoảng thời gian cố định để kiểm tra xem máy chủ (mà ứng dụng chạy) vẫn đang ở trạng thái "tốt" để chạy ứng dụng. Chủ đề này cập nhật giá trị AtomicBoolean
mà lần lượt được xác minh bởi chuỗi hoạt động trước khi chúng bắt đầu nhìn trộm để xem máy chủ có OK không.
Vấn đề của tôi là trong trường hợp tải CPU cao, luồng có trách nhiệm xác minh sẽ mất nhiều thời gian hơn vì nó phải cạnh tranh với tất cả các chủ đề khác. Nếu AtomicBoolean
không được cập nhật sau một khoảng thời gian nhất định, nó sẽ tự động được đặt thành false, gây cho tôi một nút cổ chai khó chịu.
Cách tiếp cận ban đầu của tôi là tăng mức độ ưu tiên của chuỗi xác minh, nhưng tìm hiểu sâu hơn, tôi nhận thấy đây không phải là hành vi được đảm bảo và thuật toán không nên dựa vào mức độ ưu tiên của luồng để hoạt động chính xác.
Bất kỳ ai cũng có ý tưởng thay thế? Cảm ơn!
Cung cấp cho chúng tôi mã số – Andremoniy
Thông thường, các ưu tiên không nên ảnh hưởng đến hoạt động đúng, nhưng điều này có vẻ là một vấn đề điều chỉnh. Giả sử chuỗi xác minh là thấp trên tải CPU, và các công nhân cần nhiều CPU hơn, cung cấp cho họ ưu tiên thấp hơn. Ngoài ra, hãy đảm bảo thời gian chờ cho nguyên tử của bạn không được đặt quá thấp. –
Một lần nữa: hiển thị cho chúng tôi mã nguồn của 'chuỗi xác minh' của bạn. – Andremoniy