Действительно ли безопасно использовать Java в режиме реального времени?

Я недавно читал статью "Как заставить Android работать вовремя", Инь Янь и др. Чтобы полностью понять тему, я также прочитал кое-что о Спецификации реального времени для Java (RTSJ) и о множестве виртуальных машин в реальном времени, сборщиков мусора и так далее. Тем не менее у меня все еще есть сомнения. RTSJ-совместимая виртуальная машина использует наследование приоритетов для предотвращения инверсии приоритетов, но я знаю, что этот алгоритм не предотвращает взаимоблокировки. Поскольку потоки не могут управлять порядком получения ресурсов, существует возможность циклического ожидания, которое фактически может привести к тупику.

Итак, в свете этого, действительно ли безопасно использовать Java в качестве языка программирования для целей реального времени, включая настольные и мобильные приложения?

Мой вопрос не об использовании Java, Android или Linux как есть. Мой вопрос касается алгоритма, выбранного RTSJ (приоритетное наследование), так как он не предотвращает возникновение взаимоблокировок.

1 ответ

Что вы хотите - в режиме реального времени или настольный / мобильный? В реальном времени для таких вещей, как кардиостимулятор - это означает, что если компьютер не может обещать, что работа будет завершена к моменту X, он даже не будет пытаться запустить его. Подходит только для систем, в которых известно время выполнения всех задач. Компьютеры (включая ПК, Mac и Linux) не в режиме реального времени. Поскольку Linux не в реальном времени, на Android ничего нет.

Что касается реального времени Java в целом - нет. Ничто, имеющее недетерминированную сборку мусора, не может быть использовано для программирования в реальном времени.

Другие вопросы по тегам