필자는 개발자들이 자바가 " 실시간으로 할 수 없다" 는 말을 자주 들었다 . 리눅스에서 실행되는 자바 앱이 RIOT-OS에서 실행되는 것과 같은 결정적인 실시간 시스템의 요구 사항을 충족 할 수 없다는 의미이다.
이유 를 이해하려고 노력하고 있습니다. 내 SWAG에 따르면 이는 아마도 언제든지 실행되고 시스템을 완전히 일시 중지 할 수있는 Java 가비지 수집기 때문일 것입니다. 소위 "일시 정지없는 GC"가 있지만 광고를 믿지 않아도되고 취미 프로젝트를 위해 JVM 당 $ 80K를 지불하지 않아도됩니다.
또한 Linux에서 드론 소프트웨어를 실행하는 방법에 대한이 기사를 읽고있었습니다 . 이 기사에서 저자는 리눅스가 드론을 거의 차에 충돌시키는 시나리오를 설명합니다.
Pi에서 로우 레벨 제어 루프 (PID)를 선택한 후 어려운 교훈을 얻었습니다. 영리하려고 노력했습니다. 디버깅을 위해 루프 중간에 로그 쓰기를하기로 결정했습니다. 쿼드는 처음에는 잘 뛰었지만 Linux는 결정했습니다. 하나의 로그 항목을 작성하는 데 2 초가 걸리고 쿼드가 내 차에 거의 추락했습니다!
저자가 C ++로 드론 소프트웨어를 작성했지만 Linux에서 실행되는 Java 앱이 동일한 운명을 겪을 수 있다고 생각합니다.
Wikipedia에 따르면 :
작업의 전체 정확성이 논리적 정확성뿐만 아니라 수행 시간에 의존하는 경우 시스템은 실시간이라고합니다.
그래서 나에게,이 의미는 " 총 정확성은 논리적 정확성과 적시성을 필요로하는 경우는 실시간이 없습니다. "
내가 최고 성능을 발휘할 수있는 Java 앱을 작성했다고 말하고 말하기 위해 "레몬을 압착"했다고 말하고 합리적으로 (Java로) 더 빨리 쓸 수는 없다고 가정 해 봅시다.
대체로, 제 질문은 : 누군가 n Linux를 실행하는 Java 앱이 "실시간 앱"이 아닌 이유를 모두 설명해 줄 사람을 찾고 있습니다. 즉, Java / Linux 스택에서 "적시"가되지 않아 " 완전히 올바른 "상태 가되는 것을 방지하는 모든 범주의 범주는 무엇 입니까? 언급했듯이 GC 및 Linux 로그 플러싱이 실행을 일시 중지 할 수있는 것처럼 보이지만 Java 앱 자체 외부에 타이밍 / 성능이 저하되고 마감 기한을 충족시키는 더 많은 것들이 있다고 확신합니다. 그들은 무엇인가?