Java oder C++ für Echtzeit?

Ansics

Cadet 4th Year
Registriert
Mai 2003
Beiträge
107
Hallo,

Ich arbeite grade im Team an einer virtuellen Fußballmannschaft, welche mit einem Simulationsserver kommunizieren soll. Es ist relativ wichtig, dass das Programm wleches wir schreiben die Sachen, die es berechnen soll, schnell berechnet, da der Server alle 10tel Sekunde ein Signal schickt, welches dann direkt verarbeitet werden muss.
Abhängig vom Ergebnis der Auswertung des Signals sollen bestimmte Aktionen auf dem Server ausgelöst werden.
Da das ganze in Echtzeit läuft ist es wichtig, dass die Programmiersprache das Ganze möglichst schnell umsetzt. Welche Sprache ist hierfür besser geeignet? Kann mir jemand verlässliche Informationen darüber geben?

Desweiteren würde ich gerne wissen, ob es für C++ (ähnlich wie in Java) auch eine umfangreiche Onlinedokumentation gibt.

Gruß
Ansics
 
Zuletzt bearbeitet:
Ihr könnt ja die Rechenintensiven Sachen in C/C++ schreiben und so Schmankerl wie eine grafische Oberfläche in Java machen.

Wenn ihr dann den C/C++ Teil per JNI (Java Native Interface) in Java einbindet, dann stellt das wohl ein ganz vernünftiger Kompromiss dar.

Mir kann man mir erzählen was man will, aber Java ist nicht schnell.
Vor zwei/drei Jahren hat die Zeitschrift C't einen Test gemacht, wer "schneller" ist, C++, Java oder C#, und C++ hat verloren. Allerdings ging es dabei um Vorgänge wie sie bei extremem Einsatz von Objektorientierung vorkommen. Es wurden Tausende Objekte erzeugt, kopiert, verwurschtelt, gelöscht usw.
Bei einfacher Berechnungen (Mathezeug), war C++ aber weiterhin an der Spitze.
 
Zuletzt bearbeitet:
Kann sein, dass der C++ Code, der im Test verwendet wurde, einfach schlecht war. Das weiß ich nicht mehr.
Fakt ist aber, dass Java bei starken Einsatz von Objektorientierung schnell ist. Wenn man aber auf den extremen Einsatz von "Objektmanipulation" verzichten kann, dann zieht C/C++ den "neuen Sprachen" Java und C# davon.
Das konnte ich mir als Quintessenz des Artikels merken.
 
Bei sowas würde ich um Java einen ganz großen Bogen machen. Die Bearbeitung von Daten in Echtzeit kann unter Java gar nicht stabil laufen. Du hast mit Java überhaupt keine echte Kontrolle über Prozessprioritäten oder zeitkritische Threadabläufe.

Wobei man sich bei so einem Projekt natürlich darum streiten kann wie zeitkritisch das ganze Ding ist. Als Betriebssystem käme bei einer echten zeitkritischen Anwendung weder Linux noch Windows in Frage. Aber da es hier nicht um die exakte Auswertung von Messergebnissen in Echtzeit geht, dürfte C++ schon ausreichend sein.

Java könnte - je nach Toleranz - auch klappen, würde ich mich aber nicht drauf verlassen wollen.
 
oder C# ? damit sollde der grafische teil auch relativ problemlos umzusetzten sein
 
also wenn die logik in c++ geschrieben wird dann macht es sicher enig sinn die gui in java dazu zu basteln. da würde es deutlich weniger arbeit machen die gui auch gleich in c++ z.b. mit Qt zu schreiben.

c++ liefert allerdings relativ wenige bibliotheken mit. für größere projekte sind also einige externe bibliotheken notwendig. viele davon kommen auch mit einer online dokumentation.

c# wird die selben probleme wie java haben.
 
Wegen dem Performance Test:

Kann auch einfach sein das die VM da eineiges "wegoptimiert" hat, was in C++ nicht umbedingt in dem Maß gemacht wird.
Das Java an sich langsamer sein muss ist denke ich klar, nur eben die VM macht da einiges weg ...



Ansonnsten ist C an sich schneller als C++ aber bei der Implementierung von C++ galt als Grundsatz dass es nicht langsamer als 5% sein darf (bitte nicht drauf festnageln, bin mit aber ziemlich sicher). Dafür habt ihr eben OOP, und die _maximal_ 5% wäre es mir Wert :) Sonnst schreibt man das Zeitkritischte eben doch in C...


Kannst ja auch einfach gucken in welchen Sprachen Zeitkritische Anwendungen geschrieben werden (z.B. OS) -> C/C++


Und dann müsst ihr eben noch viele Tests mit verschriedenen Implementierungen machen (ist hier eine List oder ein Vector schneller etc.), dann sollte die ganze Sache klappen denke ich ... und die richtige Hardware muss natürlich auch vorhanden sein :p


- booZy
 
Jo, ahh
Was besseres als C++, eventuell mit Assemblereinbindung gibts nicht.

Sonst wäre nicht, alles was schnell sein soll, damit programmiert.

Allerdings hat man in C++ JEDEN Freiraum etwas umzusetzten......daher kann man sich gewaltig verzetteln.

Nicht selten habe ich "früher" seitenlang Programmiert um im nachhinein festzustellen:
VERDAMMT! in der *.h gibts einen Befehl dazu.........AHHHHHH!!!
 
Schonmal danke für eure Anworten! Das hilft mir schonmal weiter :) Die Entscheidung ist allerdings noch immer nicht gefallen ... es gibt doch inzwischen auch sowas wie Echtzeit Java ... jedenfalls hab ich davon schonmal was gehört. Weiß jemand damit was anzufangen?
 
kommt drauf an was du willst. echzeit heist nicht antwort so schnell wie möglich, sondern nur das du in einer bestimmten zeit garantiert eine antwort hast.


wenns also darum geht in deiner 10tel sekunde soviel arbeit wie möglich fertig zu kriegen bringt dich echtzeit java nicht weiter. wenn du nicht viel berechnen musst, sondern nur die garantierte antwortzeit wichtig ist, dann könnte echtzeit java für dich interessant sein.
 
Dazu brauchst du erstmal ein Echtzeit OS:

http://de.wikipedia.org/wiki/Echtzeitbetriebssystem

Fuer dich dann evtl:
http://de.wikipedia.org/wiki/RTLinux
http://de.wikipedia.org/wiki/RTAI

zum verstaendniss:
http://de.wikipedia.org/wiki/Echtzeitsystem

Und wenn du das durchgelesen hast bist schlauer. Implementierung in einem standard C/C++ programm.

PS: C++ wurde designed ohne Performanceeinbußen gegenüber C zu haben
PSS: C# ist in vielen Algorithmen schneller da der JIT auf den jeweiligen eingesetzen Prozessor optimiert. D.h. SSE2, SSE3, (SSE4) benutzt.
 
Zurück
Oben