Theads in PHP / time-out "umgehen"?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Theads in PHP / time-out "umgehen"?

    Servus,

    bin gerade dabei meine Template-Benchmarks umzugestalten (irgendwann 2007+ werd ich fertig sein)

    Ds Problem das sich mir dabei - abgesehen vom Design - stellt, ist folgendes:

    Man kann beliebig viele Template-Engines auswählen und in einem Benchmark gegeneinander antreten lassen.
    Bei zuvielen Engines und/oder zu vielen Durchgängen (jeder Benchmark wird von jeder Engine x-mal absolviert;x = vom Anwneder einstellbar) gibt's irgendann einen unschönen Timetout.

    Ich könnte das vermeiden, indem ich beim Start des Benchmarks eine eindeutige ID generiere und jedesmal, wenn eine Engine durch ist, die Seite neu lade und mit der nächsten Engine weitermache.

    Alternativ könnte ich versuchen, im Hintergrund für jede Engine mit fsockopen eine Datei aufzurufen (nur HEAD und nur fputs) und in meinem Skript zu warten, bis die Ergebnisse aller Benchmarks in der DB stehen.

    Gibt es noch andere Ideen?
    Welche ist Idee ist besser? Warum?
    Ich denke, also bin ich. - Einige sind trotzdem...

  • #2
    Re: Theads in PHP / time-out "umgehen"?

    Original geschrieben von mrhappiness
    ...

    Alternativ könnte ich versuchen, im Hintergrund für jede Engine mit fsockopen eine Datei aufzurufen (nur HEAD und nur fputs) und in meinem Skript zu warten, bis die Ergebnisse aller Benchmarks in der DB stehen.

    Gibt es noch andere Ideen?
    Welche ist Idee ist besser? Warum? [/B]
    jedes mal alles neu in die DB schreiben? Da ist doch dein erster Vorschlag sicher um einiges besser!
    Wenn man jedes mal alles neu in die DB schreibt: das alte deleten (oder auch nicht?!), dann erst die inserts und dann kommt erst der select....

    mfg
    ThaDafinser

    Kommentar


    • #3
      Nein, ich meine es so:

      Anzahl Engines: 5
      ID des Benchmarks: 78

      5 x fsockopen (engine_id und benchmark_id sind die Parameter)

      do

        SELECT COUNT(DISTINCT engine_id))
        FROM benchmarks
        WHERE benchmark_id = 75

      while ermittelte_anzahl < 5

      Ergebnisse zu benchmark_id 75 aus DB lesen und darstellen

      Die mit fsockopen aufgerufen Datei führt den Benchmark für eine Engie durch und schreibt das Ergebnis in die DB
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Ich fand gestern schon die zweite Version besser, wußte allerdings noch nicht, wie Du checken wolltest, ob alle BM abgeschlossen sind. Die do/while-Variante kostet ja sicher ein wenig Rechenzeit, daß mehrfache fsockopen noch mehr ... Wenn Dein Server mitspielt, würde ich Variante 2 verwenden, sollte wesentlich schneller als Variante 1 sein.

        Auch wenn ich das Modewort AJAX hier viel zu oft höre, wäre es vielleicht noch eine Alternative (zum do/while)?
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          Original geschrieben von derHund
          Auch wenn ich das Modewort AJAX hier viel zu oft höre, wäre es vielleicht noch eine Alternative (zum do/while)?
          ich würd ja mal ein sleep einbauen ... ajax ist dafür doch eher ungeeignet <- meine Meinung, dann lieber einen meta-refresh *zuck*

          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
          Wie man Fragen richtig stellt

          Kommentar


          • #6
            @derHund
            Das von ghostgambler erwähnte sleep habe ich hinzuschreiben vergessen, geplant war es auf jeden Fall.

            Die AJAX-Variante hätte nur den Vorteil, dass ich einen Fortschrittsbalken (x% aller Engines sind fertig) darstellen könnte, die Datenbank muss ich ja trotzdem abfragen, da verzichte ich lieber auf AJAX, da ich sonst ja auch kein JS brauche
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Die AJAX-Variante hätte nur den Vorteil, dass ich einen Fortschrittsbalken (x% aller Engines sind fertig) darstellen könnte, die Datenbank muss ich ja trotzdem abfragen,
              Könntest Du Dir nicht auf diese Weise ein Ergebnis (Status=Fertig) liefern lassen? Stehe selbst nicht drin in AJAX, aber habe es so verstanden. Du sparst Dir damit ja quasi die Schleife?
              da verzichte ich lieber auf AJAX, da ich sonst ja auch kein JS brauche
              ...
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                Original geschrieben von derHund
                Könntest Du Dir nicht auf diese Weise ein Ergebnis (Status=Fertig) liefern lassen?
                Das Ergebnis "fertig" kann ich ja erst liefern, wenn der letzte Benchmark der letzten Engine abgeschlossen ist.

                Das muss ich ja irgendwie auf dem Server feststellen, also muss ich entweder auf dem Server eine Schleife laufen lassen oder mit AJAX in regelmäßigen Intervallen eine Anfrage an den Server senden.

                Aber so bewandert bin ich mit AJAX auch nicht
                ...
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Das Ergebnis "fertig" kann ich ja erst liefern, wenn der letzte Benchmark der letzten Engine abgeschlossen ist.
                  Fertig pro Benchmark meinte ich. Hast Du alle 'fertig' zusammen, bist Du fertig - egal, da AJAX ja offenbar nicht in Frage kommt. Version 2 scheint mir also die bessere zu sein
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #10
                    Alles klar, ich hatte nur nicht gesehen, wo ich da eine Schleife spare.

                    Danke für's Feedback, in Ermangelung einer dritten Möglichkeit werde ich also fsockopen und Co. nutzen
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar

                    Lädt...
                    X