phpbar.de logo

Mailinglisten-Archive

[php] Zeitproblem mit fread

[php] Zeitproblem mit fread

Yannik Hampe yannik at cipher-code.de
Die Sep 11 19:44:26 CEST 2007



Michael Hansen wrote:
> Hallo Liste,
> 
> Die Funktion ist effektiv, aber nicht effizient. Ich will damit sagen dass
> ich bei einer Anfrage 60 Sekunden auf warten muss, bis mir das Ergebnis
> angezeigt wird. Nach kurzer Analyse habe ich dann auch den zeitkritischen
> Teil ausfindig machen könnt. Wie ihr an der Funktion sehen könnt, sind sogar
> noch die letzten Variablen für die Zeitmessungen drin (absichtlich).
> Die gesamte Funktion wird schnell durchlaufen, bis hin zu den fread. Hier
> gehen gute 59 Sekunden der gesamten 60 Sekunden drauf. Nach weiterer Analyse
> (so wie ihr es jetzt auch seht) habe ich dann festgestellt, dass diese 59
> Sekunden durch den letzten Schleifendurchlauf zustande kommen. Ich habe
> keine Ahnung warum, aber im letzten Durchlauf scheint fread zu hängen.

ohne jetzt deinen Quelltext gelesen zu haben kombiniere ich folgendes 
Problem:
- fread() liest solange, bis genug daten vorhanden sind.
- sind nicht genug Daten vorhanden, blockt fread(), bis Daten vorhanden 
sind, was nie der Fall ist
- Nach 60 Sekunden wird phps socket timeout aktiv und killt die 
Verbindung. Dein Script läuft weiter.

Es sollte dir helfen die socket_*-Funktionen zu verwenden statt fsockets.
Ausserdem könnte dir stream_set_blocking helfen.
> // Michael Hansen

Yannik

php::bar PHP Wiki   -   Listenarchive