tôi đang tạo ra một ứng dụng giám sát có thể theo dõi 100-150 thiết bị ... Bây giờ để thiết kế một ứng dụng giám sát, tôi có hai phương pháp: -Về tạo thread hoặc hồ bơi thread cho 100 nhiệm vụ
Tạo luồng cho mỗi thiết bị để theo dõi và mỗi luồng sẽ ping (Sử dụng ICMP) cho thiết bị để biết thiết bị có trực tuyến hay không. Những chủ đề này sẽ chạy không chính xác để biết trạng thái của chúng sau một khoảng thời gian cụ thể (nói 60 giây).
Tạo nhóm chủ đề và cho từng thiết bị, gửi tác vụ đến nhóm chủ đề. Nhiệm vụ là ping đơn giản đến một thiết bị. Vì vậy, trong thiết kế hiện tại, các tác vụ sẽ nhiều hơn các chủ đề trong nhóm luồng. Ví dụ, nói rằng có 100 thiết bị để theo dõi, sẽ có 100 nhiệm vụ được theo dõi và thread pool sẽ có 40 chủ đề để hoàn thành 100 nhiệm vụ này. Tất nhiên, khoảng thời gian để chạy một loạt nhiệm vụ tiếp theo sẽ là để hoàn thành tất cả các tác vụ đang chờ xử lý trong nhóm luồng.
Phương pháp nào sẽ tốt hơn?
Đây sẽ là gợi ý của tôi quá. Tôi có cùng một mối quan tâm mặc dù ... những gì * if * 'N' thiết bị đã đi offline cùng một lúc, và' N' là lớn hơn kích thước hồ bơi thread ... nó có thể là giám sát có thể chết đói.Sẽ rất tuyệt khi có một bản triển khai 'ScheduledExecutorService' có thể phát hiện khi các nhiệm vụ của nó bị bỏ đói và tăng kích thước nhóm cho phù hợp. –
Và nếu bạn thêm một số chẩn đoán tối thiểu (như thông qua JMX), bạn sẽ có thể theo dõi quá trình và điều chỉnh nó một cách thích hợp. Điều này dễ dàng hơn nhiều với một dịch vụ thực thi hơn so với hồ bơi thủ công của riêng bạn hoặc các chủ đề riêng lẻ. –
@MarkPeters: 'newScheduledThreadPool' nhận một số * lõi * số nhiệm vụ, nhưng tăng nó khi cần, tôi tin. –