#java #real-time
#java #в реальном времени
Вопрос:
Спецификация реального времени для Java указывает, что она предлагает инструменты для работы со случаями инверсии приоритета, такие как протоколы наследования приоритета и ограничения приоритета.
В POSIX есть pthread_mutexattr_getprotocol
, который может установить протокол, используемый для решения этой проблемы
PTHREAD_PRIO_NONE
PTHREAD_PRIO_INHERIT //(PIP)
PTHREAD_PRIO_PROTECT //(PCP)
Мне интересно, эквивалентно ли это Java в реальном времени.
Спасибо.
Комментарии:
1. При программировании с учетом соображений реального времени вы, как правило, разрабатываете свое приложение так, чтобы это в первую очередь не было проблемой. например, используя только локальное состояние потока.
2. Не могли бы вы подробнее рассказать об этом, пожалуйста? Знакомы ли вы с
WaitFreeReadQueue
объектами и тому подобным?3. Похоже, это обеспечивает ту же функциональность, что и Queue.poll() и BlockingQueue.take(). Некоторые функциональные возможности, которые были только в RTSJ, были добавлены в OpenJDK на протяжении многих лет. 😉 Лично я избегаю использования очередей для минимизации мусора (поскольку вам нужно передавать объекты, а очереди не перерабатывают свои объекты) Вместо этого я использую ByteBuffers, использую Pipe или Exchanger.
Ответ №1:
Для поддержки, по крайней мере, наследования приоритета требуются реализации, совместимые с RTSJ; ограничение приоритета необязательно. IBM WebSphere Real Time, например, поддерживает наследование приоритетов и полагается на операционную систему, обеспечивающую наследование приоритетов для всех блокировок Java (что означает, что с любым заблокированным объектом всегда связан мьютекс pthread, хотя у нас все еще есть способы сделать это быстрее, чем это могло бы показаться в противном случае, особенно для блокировок, которые на самом деле не оспариваются). Спин-блокировки, которые традиционные JVM не реального времени, как правило, используют для ускорения кратковременных блокировок, не могут использоваться в JVM реального времени, потому что они создают проблемы с блокировкой, когда у вас потоки, запущенные с разными уровнями приоритета (во всяком случае, для политик SCHED_RR / SCHED_FIFO, где более высокий уровень приоритета вытесняет, точка).