Bei der Suche nach Übereinstimmungen mit grep
stelle ich häufig fest, dass die nachfolgende Suche erheblich weniger Zeit in Anspruch nimmt als die erste - z. B. 25s vs. 2s. Es liegt auf der Hand, dass die Datenstrukturen aus der letzten Ausführung nicht wiederverwendet wurden - diese sollten freigegeben werden. Als ich einen time
Befehl ausführte grep
, bemerkte ich ein interessantes Phänomen:
real 24m36.561s
user 1m20.080s
sys 0m7.230s
Wohin geht der Rest der Zeit? Kann ich irgendetwas tun, damit es jedes Mal schnell läuft? (zB einen anderen Prozess die Dateien lesen lassen, bevor sie grep
durchsucht werden.)
quelle
TL;DR
Antwort lautet also "[block waiting for] I / O".cat
+grep
wird noch länger dauern alsgrep
alleine.cat
Pre-Fetch als billige Option verwenden, während Sie etwas anderes tun, um sich auf dasgrep
von Interesse vorzubereiten .cat
s mittac
für den gleichen Effekt und höhere RAM-Auslastung ersetzen : D Oder alle Katzen mit tacIn einer Netzwerkspeicherumgebung kann es auch zu relativ erheblichen Verzögerungen kommen, wenn Sie zum ersten Mal auf eine Datei zugreifen, die sich auf einem vom Server getrennten "Filer" befindet. Sobald auf diese Datei auf dem Server zugegriffen wurde, wird sie lokal zwischengespeichert, und der nachfolgende Zugriff auf die Daten erfolgt viel schneller.
Hier ist ein Experiment, bei dem nur eine Prüfsumme der Dateidaten berechnet wird - nicht grep. Der erste Aufruf ist langsam und die folgenden sind schnell.
quelle