Cześć!
W poniedziałek idę do, być może, przyszłego promotora z tematem pracy inżynierskiej. Na początek chciałbym dowiedzieć się czy w ogóle coś takiego jest możliwe i czy warto w to brnąć. Otóż myślałem nad budową symulatora (tutaj wstaw coś technicznego, np. procesów chemicznych w oczyszczalni ścieków) jako aplikacji czasu rzeczywistego o miękkich wymaganiach czasowych, gdzie interfejs użytkownika będzie dostępny z poziomu przeglądarki internetowej. Sam interfejs zbudowałbym korzystając z HTML, CSS, JavaScript. Na pewno potrzebna będzie baza danych. Do symulatora dodałbym mechanizm adaptacji kroku symulacji (redukcja występujących opóźnień symulacji w stosunku do czasu rzeczywistego) aby "udawać" pracę w czasie rzeczywistym w środowisku , które takie nie jest. I tutaj pojawia się główny problem - serwer. Bardzo chciałbym wykorzystać Javę do stworzenia symulatora, jednak dość słabo nadaje się ona do rozwiązań Real Time z uwagi na Garbage Collector, ponieważ ciężko przewidzieć kiedy się uruchomi a w rozwiązaniach Real Time nie możemy pozwolić sobie na nawet krótkie przerwanie programu aby GC mógł sobie posprzątać. Ważną sprawą jest również protokół komunikacyjny, który zapewni komunikację w czasie rzeczywistym, jednak wybór ten zależy również od tego w jaki sposób zostanie zbudowany serwer. Przechodząc do sedna. Słyszał ktoś o rozwiązaniach Real Time w Javie? Jeśli tak to bardzo prosiłbym o jakieś słowa kluczowe lub linki do artykułów i czy można na tym zbudować serwer :).

- Rejestracja:około 6 lat
- Ostatnio:około 14 godzin
- Postów:62

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
- GC to niekoniecznie problem, masz takie rzeczy jak ZGC które teoretycznie nie mają fazy stop-the-world
- Java jest stosowana w systemach low-latency, ale mimo wszystko to nie jest real-time. Nie masz "gwarancji" czasowych ani możliwości stosowania jakichś "przerwań". Z tego względu to raczej słaby wybór dla systemów sterowania, szczególnie takich które wymagają circuit breakerów i interlocków. Ale już w systemie z dużą bezwładnością (np. jakieś pompy wodne czy chłodzenie) pewnie spokojnie dałoby się to zrobić, bo to czy coś się wykona 5-10ms później nie robi różnicy
- Szukaj raczej pod low-latency i HFT, nie pod real-time


The algorithm itself is a truly pauseless algorithm, meaning that at no point during this algorithm do you need to stop all the threads and not let them move. Individual threads may need to be stopped to do some scanning in their stacks or something, but other threads don't have to be stopped at the same time. It is technically a fully pauseless algo

- Rejestracja:ponad 13 lat
- Ostatnio:prawie 3 lata
Link do artykułu:
http://www.aicas.com/papers/jtres_hunt_wceta.pdf
Hasło do googla: RTSJ
Wprowadzenie:
https://www.sysgo.com/solutions/technology-solutions/guest-os/real-time-java/
Książka:
https://www.amazon.com/Real-Time-Specification-Java-James-Gosling/dp/0201703238
Stary artykuł:
https://www.oracle.com/technetwork/articles/javase/index-137216.html
Trochę nowszy:
https://www.oracle.com/technetwork/articles/java/nilsen-realtime-pt2-2264409.html
Gotowiec:
https://www.aicas.com/cms/en/JamaicaVM
Coś mniej okazałego:
http://www.aero-project.org/
Zapomniane rozwiązanie:
http://www.drdobbs.com/jvm/jbed-java-for-real-time-systems/228801031
Na Amazon hasło "real time java" w książkach daje całkiem sensowną listę.

- Rejestracja:około 6 lat
- Ostatnio:około 14 godzin
- Postów:62
Dzięki wielkie za artykuły i za rady :). Próbował ktoś pisać rozwiązania RealTime w Javie? Czy implementacja kodu jest dużo bardziej złożona niż np. pisząc serwer w C++ i wykorzystując do komunikacji WebSocket? I czy miał ktoś do czynienia ze wspomnianą wyżej JamaicaVM? Nie chciałbym się wkopać z inżynierką w nie wiadomo jak złożony projekt. Niestety wymagania czasowe są raczej konieczne w pracy dyplomowej, przynajmniej osoba u której chciałbym robić pracę dyplomową tego wymaga. Chyba, że ktoś ma jakiś pomysł na projekt wykorzystujący Javę. Dodam że studiuję automatykę i robotykę, ze specjalizacją automatyka i systemy sterowania, więc sterowanie jakimś procesem byłoby tu raczej konieczne, zamiast tworzenia jakiejś fajnej gierki na telefon :).

- Rejestracja:ponad 13 lat
- Ostatnio:prawie 3 lata
Nie wiem czy hasła "web", "Web Socket", "JavaScript", "baza danych" jakoś można legalnie wiązać z hasłem "realtime".
Nie siedzę w tej branży i nie wiem do końca jak taki "symulator realtime" miałby wyglądać.
Może na zasadzie trój-warstwowej, nie wiem:
- serwer: moduł real-time
- serwer: pamięć współdzielona
- serwer: serwer web
- klient web
Nie wiem czy ten web w ogóle potrzebny. Nie wystarczy REST API?
Raczej byłbym za tym żeby zrobić z setkę benchmarków i statystyk niż żeby się jarać wyglądem czy frejmłorkiej JS który aktualnie jest na topie w tej połowie tygodnia.

Shalomn
nodów które działają równolegle ale współdzielą jakiś rozproszony cache redisem czy hazelacastem, albo generują jakieś eventy na Kafkę -> gdzieś tam będzie bottleneck. W efekcie np. za dużo requestów może spowodować że kolejki requestów do obsłużenia zaczną puchnąć bo system nie będzie wyrabiać. Możesz mieć też mieć infrastrukturalny problem - może masz jakiś auto-scaling, load skoczył w górę i nowe instancje wstaną ale dopiero za minutę, a aktualne nie wyrabiają ;]Aryman1983Aryman1983