Często słyszałem, jak programiści wspominali, że Java nie może „ robić w czasie rzeczywistym ”, co oznacza, że aplikacja Java działająca w systemie Linux nie może spełniać wymagań deterministycznego systemu czasu rzeczywistego, takiego jak coś działającego w systemie RIOT-OS itp.
Próbuję zrozumieć, dlaczego . Mój SWAG powiedział mi, że jest to prawdopodobnie w dużej mierze spowodowane Javy Garbage Collector, który może działać w dowolnym momencie i całkowicie wstrzymywać system. I chociaż istnieją tak zwane „bez przerwy GC”, niekoniecznie wierzę w ich reklamy, a także nie mam instancji o wartości 80 000 USD na JVM, którą można by przeznaczyć na projekt hobby!
Czytałem również ten artykuł na temat uruchamiania oprogramowania dronów w systemie Linux . W tym artykule autor opisuje scenariusz, w którym Linux prawie spowodował awarię jego drona w samochodzie:
Nauczyłem się trudnej lekcji po wybraniu wykonania pętli sterowania niskim poziomem (PID) na Pi - starając się być sprytny postanowiłem umieścić zapis dziennika w środku pętli w celu debugowania - quad początkowo leciał dobrze, ale potem Linux zdecydował 2 sekundy na napisanie jednego wpisu do dziennika, a quad prawie rozbił się w moim samochodzie!
Teraz, chociaż autor napisał swoje oprogramowanie dronów w C ++, wyobrażam sobie, że aplikacja Java działająca w systemie Linux mogłaby równie dobrze spotkać ten sam los.
Według Wikipedii:
Mówi się, że system działa w czasie rzeczywistym, jeśli całkowita poprawność operacji zależy nie tylko od jej logicznej poprawności, ale także od czasu jej wykonania.
Dla mnie oznacza to zatem: „ Nie masz czasu rzeczywistego, jeśli całkowita poprawność wymaga logicznej poprawności i aktualności ”.
Udawajmy, że napisałem aplikację Java, aby była super wydajna, i że „ścisnęłam cytrynę”, że tak powiem, i nie można było rozsądnie napisać (w Javie), żeby była szybsza.
Podsumowując, moje pytanie brzmi: szukam kogoś, kto wyjaśni mi wszystkie / większość powodów, dla których aplikacja Java działająca pod Linuksem nie byłaby „aplikacją czasu rzeczywistego”. To znaczy, jakie są wszystkie kategorie rzeczy na stosie Java / Linux, które uniemożliwiają mu „bycie na czas”, a zatem „ całkowitą poprawność ”? Jak wspomniano, wygląda na to, że płukanie dzienników GC i Linux może wstrzymać wykonanie, ale jestem pewien, że poza samą aplikacją Java jest więcej rzeczy, które mogłyby spowodować złe wyczucie czasu / wydajność i spowodować, że będzie ona musiała sprostać ograniczonym terminom. Czym oni są?