Kleine Auftragsarbeit php script -> C (Zahle gut!)



  • Hallo

    ich habe ein kleines php Script (80 Zeilen), welches auf einer Linux bash in Verwendung ist. Aus Gründen der Performance soll daraus ein kleine C tool werden. Das Script stellt eine UDP Anfrage an einen Server...

    Wer könnte mir dies umschreiben? Für eine saubere Lösung bin ich gern bereit auch entsprechend zu zahlen.

    Gruss, cfour


  • Mod

    Für solch eine Kleinigkeit hätte vielleicht sogar eine nette Frage gereicht, aber jetzt da wir wissen, dass du bereit bist, Geld zu zahlen... 😉

    Erwarte nicht zu viel vom Wechsel der Sprache. Eine compilierte Sprache macht keine Internetverbindungen schneller, sie macht Rechnungen schneller. Sofern dein Script nicht die meiste Zeit mit Hardcoreberechnungen verbringt, wird ein Wechsel herzlich wenig bringen.

    Muss es denn unbedingt C sein? Dies ist primär ein Forum für C++-Programmierung. Die Leute, die C wirklich gut können, kannst du hier an einer Hand abzählen. Und viele davon können auch C++ und würden dies sicher bevorzugen, wenn sie die Wahl haben.



  • SeppJ schrieb:

    Für solch eine Kleinigkeit hätte vielleicht sogar eine nette Frage gereicht, aber jetzt da wir wissen, dass du bereit bist, Geld zu zahlen... 😉

    Erwarte nicht zu viel vom Wechsel der Sprache. Eine compilierte Sprache macht keine Internetverbindungen schneller, sie macht Rechnungen schneller. Sofern dein Script nicht die meiste Zeit mit Hardcoreberechnungen verbringt, wird ein Wechsel herzlich wenig bringen.

    Muss es denn unbedingt C sein? Dies ist primär ein Forum für C++-Programmierung. Die Leute, die C wirklich gut können, kannst du hier an einer Hand abzählen. Und viele davon können auch C++ und würden dies sicher bevorzugen, wenn sie die Wahl haben.

    oh 🙂 nunja...ich nutze das gewerblich und daher soll der Progger auch ruhig was dafür kommen. Leben und Leben lassen 😉

    Aber zum Thema...die Frage ob es etwas bringt ist natürlich berechtigt 🙂 Der Server hängt an einem 100 MBit Kabel und es sollen möglichst viele Anfragen gleichzeitig versenden werden (keine Angst..geht nich um DoS). Flaschenhals ist also der Server..zumindest theoretisch 🙂

    Kann ich unter Linux die Zeit für die Ausführung in Erfahrung bringen?

    php script.php

    Gruss, cfour



  • Mit time kannst du unter anderem messen, wieviel Zeit dein Programm verbraucht hat.


  • Mod

    cfour schrieb:

    Kann ich unter Linux die Zeit für die Ausführung in Erfahrung bringen?

    php script.php

    Ich hätte spontan mal time php script.php probiert. Möglicherweise ist dies bei php-Skripten nicht aussagekräftig, aber einen Versuch ist es Wert. Oder hast du das bereits getan? Falls es funktioniert, kannst du sehen, ob dein Skript wirklich etwas tut oder ob es bloß auf irgendetwas wartet.
    Es gibt sicherlich auch fortschrittlichere Hilfsmittel speziell für php. So etwas nennt man Profiler. Da php eine Skriptsprache ist, sollte es sehr einfach sein, damit sehr detaillierte Informationen zu bekommen, womit das Skript seine Zeit verbringt.



  • Wow, ein Mal schneller als SeppJ 🙂
    Werde mir den Tag rot im Kalender markieren.



  • 8x 10000 Anfragen ergeben (geleichzeitig):

    real 0m34.846s
    user 0m0.300s
    sys 0m0.132s

    real 0m34.703s
    user 0m0.280s
    sys 0m0.140s

    real 0m34.511s
    user 0m0.252s
    sys 0m0.176s

    real 0m34.494s
    user 0m0.292s
    sys 0m0.136s

    real 0m34.504s
    user 0m0.276s
    sys 0m0.148s

    real 0m34.497s
    user 0m0.284s
    sys 0m0.144s

    real 0m34.508s
    user 0m0.264s
    sys 0m0.168s

    real 0m34.505s
    user 0m0.280s
    sys 0m0.152s

    CPU tatsächlich gelangweilt..Last auf eth0 ebenfalls nur ca. 1500-2000 kbits/sec.

    Ist die Lösung demnach einfach nur nochmehr parallel abzufragen?


  • Mod

    Daraus kann man zwei Dinge herauslesen:
    1. Ja, die Sprache ist, wie erwartet, nicht das Problem. Das Programm wartet bloß.
    2. Dein Programm macht also offensichtlich nicht das, was es soll, ist also im weiteren Sinne falsch. Das Ziel ist schließlich (wenn ich dich richtig verstanden habe), möglichst viele Anfragen in möglichst kurzer Zeit durchzuführen.

    Die Lösung für 2. kann durchaus sein, mehr parallel zu fragen. Das kommt eben auf die genaue Ursache an, die es noch herauszufinden gilt, die kann man aus den Messdaten nicht ablesen. Wenn du uns sagst, dass dein Programm derzeit immer bloß eine Abfrage nach der anderen seriell durchführt, dann würde ich aber ebenfalls ganz stark da drauf setzen, dass das eigentliche Problem hier die fehlende Parallelisierung ist. Schließlich wartet dann nicht bloß dein Programm auf eine Antwort auf die Anfrage, sondern auch die ganze Leitung (die (vermutlich!) der Flaschenhals ist und daher möglichst voll ausgelastet werden sollte) wartet aus Sympathie mit, da das Programm ihr in der Zeit nichts anderes zu tun gibt.



  • SeppJ schrieb:

    Daraus kann man zwei Dinge herauslesen:
    1. Ja, die Sprache ist, wie erwartet, nicht das Problem. Das Programm wartet bloß.
    2. Dein Programm macht also offensichtlich nicht das, was es soll, ist also im weiteren Sinne falsch. Das Ziel ist schließlich (wenn ich dich richtig verstanden habe), möglichst viele Anfragen in möglichst kurzer Zeit durchzuführen.

    Die Lösung für 2. kann durchaus sein, mehr parallel zu fragen. Das kommt eben auf die genaue Ursache an, die es noch herauszufinden gilt, die kann man aus den Messdaten nicht ablesen. Wenn du uns sagst, dass dein Programm derzeit immer bloß eine Abfrage nach der anderen seriell durchführt, dann würde ich aber ebenfalls ganz stark da drauf setzen, dass das eigentliche Problem hier die fehlende Parallelisierung ist. Schließlich wartet dann nicht bloß dein Programm auf eine Antwort auf die Anfrage, sondern auch die ganze Leitung (die (vermutlich!) der Flaschenhals ist und daher möglichst voll ausgelastet werden sollte) wartet aus Sympathie mit, da das Programm ihr in der Zeit nichts anderes zu tun gibt.

    Vielen Dank für die super Erklärung. Spielt es dann eine Rolle ob ich innerhalb php parallelisiere oder einfach das php Script n x gleichzeitig ausführe? Kommt das nicht auf das gleiche raus?


  • Mod

    Das kommt ganz drauf an, was dein Programm macht. Wenn die Abfragen total unabhängig sind, dann kann die Methode durchaus funktionieren und wäre eine sehr einfache Lösung.



  • das ist der Kern, um welchen es geht 😉


Anmelden zum Antworten