Tôi thường nghe các nhà phát triển đề cập rằng Java không thể " thực hiện thời gian thực ", nghĩa là một ứng dụng Java chạy trên Linux không thể đáp ứng các yêu cầu của hệ thống thời gian thực xác định, chẳng hạn như một cái gì đó chạy trên RIOT-OS, v.v.
Tôi đang cố gắng để hiểu tại sao . SWAG của tôi nói với tôi rằng điều này có lẽ phần lớn là do Trình thu gom rác của Java, có thể chạy bất cứ lúc nào và hoàn toàn tạm dừng hệ thống. Và mặc dù có cái gọi là "các GC tạm dừng" ngoài kia, tôi không nhất thiết phải tin vào quảng cáo của họ và cũng không có ví dụ $ 80K mỗi JVM để trao đổi cho một dự án sở thích!
Tôi cũng đã đọc bài viết này về việc chạy phần mềm drone trên Linux . Trong bài viết đó, tác giả đã mô tả một kịch bản trong đó Linux gần như khiến máy bay không người lái của mình đâm vào xe của mình:
Tôi đã học được một bài học khó sau khi chọn thực hiện vòng điều khiển mức thấp (PID) trên Pi - cố gắng khéo léo Tôi quyết định đặt một bản ghi nhật ký ở giữa vòng lặp để gỡ lỗi - ban đầu, quad đã chạy tốt nhưng Linux đã quyết định mất 2 giây để viết một mục nhật ký và bộ tứ gần như đâm vào xe của tôi!
Bây giờ mặc dù tác giả đó đã viết phần mềm bay không người lái của mình bằng C ++, tôi sẽ tưởng tượng một ứng dụng Java chạy trên Linux rất có thể chịu chung số phận.
Theo Wikipedia:
Một hệ thống được gọi là thời gian thực nếu tổng độ chính xác của một thao tác không chỉ phụ thuộc vào tính chính xác logic của nó, mà còn phụ thuộc vào thời gian mà nó được thực hiện.
Vì vậy, với tôi, điều này có nghĩa là " Bạn không có thời gian thực nếu tổng độ chính xác đòi hỏi tính đúng đắn và kịp thời logic " .
Hãy giả vờ rằng tôi đã viết một ứng dụng Java để trở nên siêu hiệu quả và tôi đã "vắt chanh" để nói và nó không thể được viết một cách hợp lý (bằng Java) nhanh hơn nữa.
Nói chung, câu hỏi của tôi là: Tôi đang tìm ai đó để giải thích cho tôi tất cả / hầu hết các lý do tại sao một ứng dụng Java chạy n Linux sẽ không trở thành "ứng dụng thời gian thực". Có nghĩa là, tất cả các danh mục của mọi thứ trên ngăn xếp Java / Linux là gì ngăn nó "kịp thời", và do đó, " hoàn toàn chính xác "? Như đã đề cập, có vẻ như việc ghi nhật ký của GC và Linux có thể tạm dừng thực thi, nhưng tôi chắc chắn rằng có nhiều thứ bên ngoài ứng dụng Java sẽ gây ra thời gian / hiệu suất kém và khiến nó gặp phải các ràng buộc về thời hạn khó khăn. Họ là ai?