Christian Kruse: Zwei dateinen gleichzeitig zeichenweise einlesen

Beitrag lesen

Hallo Tom,

Dann wüsste ich nämlich, was da passiert, wenn ich, sagen wir mal,
in der Applikationsschicht immer 17.000 Bytes abrufe.

Es wird für ein fread($fd,17000) folgendes getan:

Solange keine 17000 Byte verarbeitet:
  Hole soviel Bytes wie moeglich, maximal aber 17000 aus dem Puffer
  und kopiere sie in den User-Buffer

Prüfe, ob der Puffer leer ist:
    wenn er leer ist, hole die naechste Page aus der Datei
    Kopiere die Page in den Puffer

Kehre zurueck zur Aufrufstelle

Irgendwann ist der Buffer ja mal aufgebraucht. Wann werden denn
wieviel Bytes nachgeladen vom System?

Wie das System arbeitet, weiss ich nicht. Ich bin ehrlich gesagt
auch nicht bereit, das zu pruefen, der Kernel-Code ist mir zu
aufwendig zu lesen.

Was passiert mit dem Rest?

Er bleibt im Puffer.  Der Puffer wird geloescht, sobald das
Filehandle geschlossen wird.

Wodurch wird die Buffergröße gesteuert?

Bus-Breite, Architektur, etc, pp

Was passiert, wenn gerade 100 User aktiv sind auf dem Server?

Das macht nur insofern einen Unterschied, als das der Kernel dann
die Datei intern nochmal cached.

Das mit $_file = file() und while($_file[] = fgets() )
[Pseudecode] kann ich mangels Webserver heute leider nicht
ausprobieren. Der geht erst morgen wieder. Darum hatte ich Dich
gebeten, doch die Vergleichszahlen nochmal zu produzieren. (siehe
anderer Thread)

Es bringt nichts. Im ersten Fall kann es sein, dass die Datei
gecached ist oder auch nicht. Im zweiten Fall ist sie es aber mit
Sicherheit.

Grüße,
 CK

--
Unsere Vorstellungen von der Ewigkeit sind genauso nuetlich wie die Mutmassungen eines Kuehkens ueber die Aussenwelt bevor es die Eierschale aufbricht.
http://wwwtech.de/