Tôi có một ứng dụng java trong đó sử dụng một vài trường hợp MulticastSocket để nghe đến một vài nguồn cấp dữ liệu đa hướng UDP. Mỗi ổ cắm như vậy được xử lý bởi một sợi chuyên dụng.
Chủ đề đọc từng Datagram, phân tích nội dung của nó và ghi vào nhật ký (log4j) id trình tự của gói (long) và dấu thời gian mà Datagram đã nhận được.java - MulticastSocket vấn đề trên Windows Server 2008
Khi tôi cố gắng chạy 2 phiên bản của cùng một ứng dụng trên Windows Server 2008 R2, với 2 * 6 lõi và so sánh 2 bản ghi được tạo bởi 2 ứng dụng, Tôi nhận thấy rằng thời gian của gói không giống nhau.
Hầu hết các gói được nhận bởi 2 ứng dụng cùng một lúc (milis), nhưng thường xuyên có sự khác biệt khoảng 1-7ms khác nhau giữa thời gian tiếp nhận của cùng một gói bởi 2 ứng dụng.
Tôi đã thử phân bổ thêm bộ đệm trong NIC và cũng làm cho bộ đệm ổ cắm lớn hơn. Ngoài ra, tôi đã thử giảm thiểu số lần chạy GC và tôi cũng sử dụng -verbose: gc và có thể thấy rằng thời gian GC và sự khác biệt về thời gian có vấn đề không xảy ra cùng một lúc. Điều này cho phép tôi giả định rằng vấn đề của tôi không liên quan đến GC.
Không có vấn đề về gói thả nào được quan sát và vấn đề về băng thông không có khả năng xảy ra.
Ý tưởng/Ý kiến được hoan nghênh. Cảm ơn.
Tần số ngắt của hệ điều hành AFAIK là 1 trên mỗi 10ms, do đó hệ điều hành không thể đảm bảo các khoảng thời gian cao hơn mức đó. –