Richtige Programmiersprache gesucht

ralle_h

Moderator
Hardwareluxx Team
Thread Starter
Mitglied seit
11.03.2007
Beiträge
27.392
Ort
München
Hey zusammen,

hab da eine kleine Frage an Personen, die schon sehr viel mit verschiedenen Programmiersprachen gearbeitet haben und einen großen Überblick über die Performance der jeweiligen Operationen im Vergleich haben (ich hoffe da findet sich wer).

Es geht um folgende Anwendung, bei der wirklich jede ms an Durchlaufzeit/Performances zählt:

1. Daten werden per GET Befehl von einer Website geholt
2. Daten werden geparst
3. Strings werden (in einem Array) verglichen
4. Ein POST Request wird zurück an die Website gesendet

Bei Punkt 1. bis Punkt 3. sollten sich die meisten Sprachen vermutlich nicht viel nehmen, auch wenn da auch schon jede ms zählt, aber gerade bei Punkt 4 erwarte ich ein paar Unterschiede.

Ich bedanke mich im Voraus für jegliche qualifizierte Hilfe :)
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Die Geschwindigkeit hängt gerade bei 3 von der Länge der Strings und der Größe des Arrays ab. 4 hängt meiner Meinung nach primär von der Latenz des Netzwerks ab. Anstatt Strings zu vergleichen würde ich versuchen, ob das nicht auch anders zu lösen ist.
 
Ist wohl schwer von den Daten abhängig. Nachdem die Herangehensweise nicht unbedingt darauf schließen lässt, dass deine Daten hoch komplex sind, nimm einfach eine Scriptsprache. PHP reicht, oder Python wenn dir das lieber ist. Du kannst in der Ausführung einiges optimieren, wodurch die Sprache mit dieser kleinen Aufgabe relativ zügig fertig sein sollte.

Wie amtrax aber schon sagte, ist das aber nicht nur sprachenabhängig sondern hängt auch vom Netzwerk ab. 1 und 4 kannst du mit der Sprache nur sehr wenig beeinflussen.
 
Ist es wirklich sinnvoll bzw. notwendig die Daten runter auf den Rechner zu ziehen? Je nachdem was die Aufgabenstellung genau ist, könnte man das ganze auf dem Server erledigen und nur das Ergebnis zurücksenden. Das würde den Faktor Netztwerk ausschließen welcher die größte Komponente sein dürfte, sofern die Datenmengen nicht enorm sind, darstellen.

Für Stringvergleiche gibt es diverse Konstrukte die das Prozedere enorm beschleunigen. Stichworte: Sortierung und Interpolation (wobei ich denke dass du das bereits weisst, ist ja erstes Semester Informatik...).
 
Der Server ist leider extern und der Anbieter will gar nicht, dass man die Daten abgreift ;)
 
Uhm.. okey..
Also wenns um solch rohe Berechnungen (auch Vergleiche von Strings sind ja Berechnungen) geht nichts über C oder C++. Dafür gibts auch viele Librarys für die Internetverbindung und was du sonst brauchst. Allerdings wird die Umsetzung damit etwas schwieriger bzw. umständlicher als wenn dus in eienr webbasierten Skriptsprache wie JS (und HTML) machen würdest.
Sag uns aber mal wie groß die Datenmengen sind die übertragen und die verglichen werden müssen. Dann könnte man einschätzen ob der Aufwand lohnt (denn die reine Internetübertragung dürfte bei allen Sprachen ähnlich sein).
 
Für Punkt 2 und 3 sind Kompilate in Maschinencode die schnellste Lösung. Ob diese dabei aus C, C++ oder per HipHop aus PHP generiert werden spielt dabei kaum noch eine Rolle.
Auf Punkt 1 und Punkt 4 wiederum hat die Sprachwahl praktisch keine Auswirkungen. Das Tempo bei diesen wird im wesentlichen von der Gegenstelle und der Netzwerkverbindung bestimmt.
Interpretierte Scriptsprachen sind bei diesem Anwendungsfall jedenfalls keine gute Wahl. Die sind dazu viel zu langsam.
 
@CrazyWurscht: Es wird ja nicht nach Einfachheit gefragt, sondern nach Performance.

Es stellt sich die Frage, von was hier gesprochen wird, schließlich kann man von verschiedenen Punkten an das Problem ran gehen:
- Du kannst die Laufzeit optimieren, indem du deinen Code optimierst (z.B. durch Optimierung der Operationen).
- Du kannst die Laufzeit optimieren, indem du deinen Code kompilierst.
- Du kannst die Laufzeit durch Multithreading optimieren.
- Du kannst die Laufzeit durch den Einsatz von mehr Rechenpower optimieren.

Größter Punkt für Performance in deiner Aufstellung ist wie schon erwähnt, das StringCompare.

Hört sich alles in allem ziemlich nach nem Bot an. Und laufzeitkritische Anwendungen werden da eigentlich nur gebraucht, wenn es um Geld geht.
Willst du nen Trading-Bot für Steam bauen? :d
 
Korrekt, einfach soll/muss es nicht sein, zumal der Code schon vorhanden ist, aber nicht ausreichend performant ist :)

Hört sich alles in allem ziemlich nach nem Bot an. Und laufzeitkritische Anwendungen werden da eigentlich nur gebraucht, wenn es um Geld geht.
Willst du nen Trading-Bot für Steam bauen? :d

Korrekt subsumiert, Respekt :)

Hast du auf diesem Gebiet Erfahrung bzw. kann man dich anheuern?
 
Naja so schwer war das auch wieder nicht zu erraten, weil der Steam Markt im Prinzip der Einzige ist, wo man auch ohne hohes Budget einiges rausholen kann ;)
Aber ich hab mich damit und dem Marktvolumen vor ein paar Wochen auch mal kurz beschäftigt, deswegen hab ich da nur 1 und 1 zusammen gezählt.

Für mich ist das aber nichts, weil ich nicht wirklich viel Ahnung von Programmoptimierung hab, ist mir zu mathematisch :)

Zudem ist mir das Risiko zu hoch, dass man Ärger von behördlicher Seite bekommt, aber dass muss jeder selbst wissen.

Wirklich wichtig ist, dass dein Programm auf Linux Servern läuft, weil du mit deinem Programm möglichst nah (geografisch) an die Rechenzentren von Valve ranrücken solltest, damit sparst du auf jeden Fall schon mal einige zehntel.
 
Hört sich alles nach ner Aufgabe für ein Linux Shell Script an.

- Daten per wget holen
- Verarbeiten direkt im Script
- Senden der Daten per curl

Performance ist hierbei sehr gut, wenn man sich in die Scriptprogrammierung ein wenig einarbeitet. Eine Programmiersprache für die Aufgabe halte ich für oversized.

Nachteil:
- Setzt Linux voraus (kann man ja evtl. in ner VM laufen lassen).
 
Bei Punkt 1 und 4 kommt es hauptsächlich auf deine Netzwerk-Geschwindigkeit an, das kann man durch eine andere Programmiersprache schlecht beschleunigen.

nimm einfach eine Scriptsprache
nein, das wäre die ungünstigste Lösung. Was Cobrion gesagt hat, möchte ich nochmal ausführlicher darlegen:
Skriptsprachen sind bei der Ausführung im Durchschnitt 50 bis 100 mal langsamer als kompilierter Code. Je hardwarenäher man programmiert, desto schneller ist man. Folglich sollte man für Punkt 2 und 3 Assembler-Code verwenden. Das ist zwar etwas komplizierter und der Funktionsumfang ist in solchen Sprachen noch etwas rudimentär, aber es ist sogar nochmal deutlich schneller* als Programme, die in Java, .NET usw. laufen.
Wenn Assembler einem etwas zu konfus ist, kann man auch C oder C++ nehmen, da diese Sprachen auch noch relativ hardwarenah sind.
Des Weiteren kannst du deinen Code beschleunigen, indem du deine Algorithmen optimierst. Wie viel Optimierungspotenzial du hast, hängt immer ganz konkret von deinem Algorithmus ab, bzw. von dem, was er machen soll. Parsen und Strings vergleichen sind vergleichsweise leider nicht so die schnellsten Operationen in Computern.

*Die schnellsten bekannten Algorithmen für einige mathematische Operationen sind auch heute noch in Assembler geschrieben, weil auch die besten Compiler von C/C++/.NET usw. oft leicht ineffizienten Code generieren.
 
Skriptsprachen sind bei der Ausführung im Durchschnitt 50 bis 100 mal langsamer als kompilierter Code.
[CITATION NEEDED].

Es kommt nicht nur drauf an, ob Code erst übersetzt wird und dann ausgeführt oder ob er interpretiert wird. Siehe Beispiele Python und Haskell. Es kommt zwar unter anderem auch darauf an, was man versucht zu erreichen. Möchte man mathematische Probleme (sagen wir mal z. B. Probleme wie bei Project Euler) ist C etwas im Vorteil. Wieviel Komfort sollte man für Microsekunden aufgeben?

Je hardwarenäher man programmiert, desto schneller ist man. Folglich sollte man für Punkt 2 und 3 Assembler-Code verwenden.

Und als nächstes soll er seine Probleme in Stein meißeln und über Rechenschieber lösen? Mal ehrlich, du schießt mit Kanonen auf Spatzen. Ich bin ja dafür, dass für jedes Problem eine passende Lösung (in Form von z. B. einer Programmiersprache) gefunden werden muss aber das Overkill - und so nicht richtig.

Ich persönlich empfehle Python. Python hat unzählige Module, die einem extrem viel Arbeit abnehmen und in quasi allen Fällen optimiert sind. Abgesehen davon hat Python C als unterbau (damit sollten auch signed911's Bedürfnisse erfüllt sein). Außerdem ist auch für Programmierneulinge, die nur andere Sprachen kennen, aber ein Grundsätzliches Verständniss haben, der Einstieg in Python einfach.

Für Punkt...
1. https://docs.python.org/2/howto/urllib2.html
2. Parsen ist schnell und unkompliziert (je nach Problemstellung) implementiert, dazu brauch es kein spezielles Modul.
3. Mit Arrays (in Python Listen) ist Python ganz groß und bietet extrem viele vorimplementierte und nützliche Sachen. In C fängst du dann erstmal an eine Append funktion zu schreiben.
4. siehe Punkt 1.
 
Zuletzt bearbeitet:
Von der Machbarkeit her lässt sich die Anforderung von ralle_h bereits mit der Linux Shell oder unter Windows auch mit der PowerShell umsetzen.
Macht es Sinn sich über einige Millisekunden Laufzeit Gedanken zu machen, wenn am anderen Ende ohnehin ein Webserver steht?

Und als nächstes soll er seine Probleme in Stein meißeln und über Rechenschieber lösen?

Das sehe ich ähnlich. C oder gar Assembler haben ganz klar ihre Daseinsberechtigung, z.B. da wo es auf absolute Kontrolle und immer gleichbleibende Laufzeiten ankommt oder die Ressourcen begrenzt sind (KFZ, Schiffe, Flugzeuge, Kraftwerke, Industrieanlagen, Eisenbahn, Heizungssteuerungen, Waschmaschinen usw.).
Es ist nicht verkehrt sich einmal grundlegend mit Assembler und C befasst und Dinge wie z.B. Register, Speicheroperationen, Stacks & Co verstanden zu haben. Dieses Grundverständnis kann einem später immer mal wieder weiterhelfen.
Für http-Requests, Textanalyse und Arrays / Listen bringen andere Sprachen jedoch bereits sehr gute, einfach einzusetzende Werkzeuge mit.

Neben Python fallen mir spontan noch Ruby, Java und C# ein. All diese Sprachen bringen eine automatische Speicherverwaltung mit. Da muss man dann nicht mehr direkt mit Pointern auf Speicherbereiche arbeiten und sich in der Regel auch keine Gedanken über Dinge wie "call by reference" oder "call by value" machen. Es reicht wenn man diese Dinge irgendwo grob im Hinterkopf behält, sollte man sich einen fiesen Fehler einbauen.
 
Das sehe ich ähnlich. C oder gar Assembler haben ganz klar ihre Daseinsberechtigung, z.B. da wo es auf absolute Kontrolle und immer gleichbleibende Laufzeiten ankommt oder die Ressourcen begrenzt sind (KFZ, Schiffe, Flugzeuge, Kraftwerke, Industrieanlagen, Eisenbahn, Heizungssteuerungen, Waschmaschinen usw.).

Allerdings ist das Vorhaben des TEs eigentlich durchaus "einfach" genug dass man ohne viel mehraufwand auch die Geschwindigkeit mitnehmen kann wenn man C und ein par fertige Librarys verwendet.
Gleich reines Assembler würde ich natürlich auch nicht empfehlen...
 
Performance-mäßig dürfte es bei String-Operationen etwa so aussehen: Assembler > Perl, C > C++, Ruby, Python, PHP > JavaScript > Java, C#, Lua.
Wenn Performance wichtig ist, würde ich vermutlich Perl nehmen. Das wurde ursprünglich genau dafür entwickelt, entsprechend effizient ist es in diesem Bereich.
 
Ich hab geahnt, dass dieser Kommentar kommt. ;)
Ich kann dir dafür leider keinen Link posten, ich hab eben gegooglet und hab derartige Geschwindigkeitsvergleiche nicht gefunden. ich hab die Information von einem Dozenten aus seiner Vorlesung. Wenn das falsch sein sollte, bzw. kompetente Quellen einen anderen Faktor als Geschwindigkeitsdifferenz festgestellt haben, dann bitte ich, dies zu entschuldigen und lasse mich auch gern eines Besseren belehren.
 
Dem muss ich widersprechen, Java ist deutlich performanter als Script-Sprachen, würde es direkt hinter C++ einordnen.
Siehe dazu: https://blog.twitter.com/2011/twitter-search-now-3x-faster
Dein Link ist zwar interessant, geht aber ein wenig am Thema vorbei. Twitter hat nicht einfach nur die Programmiersprache gewechselt, sondern die komplette Architektur. Damit ist keine direkte Vergleichbarkeit zwischen den Programmiersprachen mehr möglich.

Java ist zwar in einigen Bereichen deutlich schneller als die meisten Scriptsprachen. Die String-Verarbeitung gehört einigen Low-Level Benchmarks zu Folge jedoch nicht dazu, zumindest nicht mit den Standard-Bibliotheken. Mit optimierten Bibliotheken ließe sich sicherlich noch sehr viel herausholen, aber warum den Aufwand betreiben, wenn die Standard-Bibliotheken anderer Sprachen in dem Bereich sowieso schon hoch optimiert sind.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh