Tôi đã hỏi câu hỏi này lần đầu tiên here, nhưng tôi đã nhận ra rằng câu hỏi của tôi không phải là một vòng lặp thời gian thực. Những gì tôi muốn biết là, cách thích hợp để thực hiện truyền thông điệp không đồng bộ hiệu suất cao trong Java là gì?Java: Thông báo hiệu năng cao (đơn sản xuất/người tiêu dùng đơn)
Những gì tôi đang cố gắng để làm ...
Tôi có ~ 10.000 người tiêu dùng, từng tốn nhiều tin nhắn từ hàng đợi tin của họ. Tôi có một chủ đề sản xuất tin nhắn từng người một và đặt chúng vào hàng đợi chính xác của người tiêu dùng. Mỗi vòng lặp của người tiêu dùng vô thời hạn, kiểm tra thông báo xuất hiện trong hàng đợi của nó và xử lý nó.
Tôi tin rằng thuật ngữ này là "một nhà sản xuất đơn/người tiêu dùng", vì có một nhà sản xuất và mỗi người tiêu dùng chỉ hoạt động trên hàng đợi riêng của họ (nhiều người tiêu dùng không bao giờ đọc từ cùng một hàng đợi).
Bên Consumer.java:
@Override
public void run() {
while (true) {
Message msg = messageQueue.poll();
if (msg != null) {
... // do something with the message
}
}
}
Các nhà sản xuất đang đặt thông điệp bên trong hàng đợi thông điệp tiêu dùng với tốc độ nhanh (vài triệu tin nhắn mỗi giây). Người tiêu dùng nên xử lý các tin nhắn này càng nhanh càng tốt!
Lưu ý: while (true) { ... }
bị chấm dứt bởi thông báo KILL được gửi bởi Nhà sản xuất làm thông báo cuối cùng của nhà sản xuất.
Tuy nhiên, câu hỏi của tôi là về cách thích hợp để thiết kế thông điệp này. Tôi nên sử dụng loại hàng đợi nào cho messageQueue? Nó có nên đồng bộ hoặc không đồng bộ không? Thông báo nên được thiết kế như thế nào? Tôi có nên sử dụng vòng lặp while-true không? Người tiêu dùng có nên là một chủ đề hay cái gì đó khác không? 10.000 chủ đề có bị chậm lại không? Thay thế cho chủ đề là gì?
Vì vậy, cách thích hợp để thực hiện truyền thông điệp hiệu suất cao trong Java là gì?
Tại sao bạn có chủ đề 10k? Sẽ có rất nhiều chi phí trên chuyển đổi thread trừ khi bạn có rất nhiều lõi hoặc nhiệm vụ liên quan đến một số tiền hợp lý chờ đợi cho mỗi thread. – Mike
10k chủ đề cách xa hiệu suất cao – whiskeysierra
'@Mike:' Có 10.000 biểu tượng khác nhau và mỗi người tiêu dùng xử lý thông điệp cho một biểu tượng. Tôi không biết nếu nó nên được thực hiện như là chủ đề, nhưng người tiêu dùng chia sẻ không có gì với nhau, và làm cho một ứng cử viên tốt cho các mô hình diễn viên. –