Warum liest ein Byte 20x langsamer als 2, 3, 4, ... Bytes aus einer Datei?

9

Ich habe versucht, den Kompromiss zwischen read und seek zu verstehen. Bei kleinen "Sprüngen" ist das Lesen nicht benötigter Daten schneller als das Überspringen mit seek .

Beim Timing verschiedener Lese / Such-Chunk-Größen, um den Kipppunkt zu finden, stieß ich auf ein seltsames Phänomen: read(1) ist ungefähr 20 mal langsamer als read(2) , read(3) usw. Dieser Effekt ist der gleiche für verschiedene Lese-Methoden, z read() und readinto() .

Warum ist das der Fall?

Suchen Sie in den Timing-Ergebnissen für die folgende Zeile 2/3 des Weges durch:

%Vor%

Umgebung:

%Vor%

Timing-Ergebnisse:

%Vor%

Benchmarking-Code:

%Vor%     
ARF 13.01.2017, 00:30
quelle

1 Antwort

1

Dies liegt daran, dass bei jedem einzelnen Anruf der gesamte Overhead für die Funktion auftritt. Wenn Computer immer noch 8-Bit wären, wäre dieses Phänomen interessanter.

Die Antwort ist einfach: Wenn Sie größere Werte übergeben, verarbeiten Sie mehr Bytes pro Iteration ; wie alle Ihre Besorgungen auf der einen Seite der Stadt, bevor Sie den ganzen Weg zur anderen Seite der Stadt fahren; Je größer der Wert ist, der an read() weitergegeben wird, desto mehr Botengänge erledigen Sie gleichzeitig und desto effizienter ist es (möglicherweise).

    
veganaiZe 03.07.2017 23:08
quelle

Tags und Links