Vergleich der Ausführungszeiten verschiedener Befehle
Nachdem wir nun wissen, wie man den Befehl time
verwendet und seine Ausgabe interpretiert, wollen wir die Ausführungszeiten verschiedener Befehle vergleichen, um ihre Leistungsmerkmale zu verstehen.
Erstellen wir zunächst ein E/A-intensives Skript, das Daten liest und schreibt:
echo '#!/bin/bash' > ~/project/io_intensive.sh
echo 'for i in {1..10}; do' >> ~/project/io_intensive.sh
echo ' cat /etc/passwd > ~/project/temp_file_$i.txt' >> ~/project/io_intensive.sh
echo ' cat ~/project/temp_file_$i.txt > /dev/null' >> ~/project/io_intensive.sh
echo 'done' >> ~/project/io_intensive.sh
echo 'rm ~/project/temp_file_*.txt' >> ~/project/io_intensive.sh
echo 'echo "I/O operations complete"' >> ~/project/io_intensive.sh
Machen Sie das Skript ausführbar:
chmod +x ~/project/io_intensive.sh
Lassen Sie uns nun dieses E/A-intensive Skript timen:
time ~/project/io_intensive.sh
Sie sollten eine ähnliche Ausgabe wie diese sehen:
I/O operations complete
~/project/io_intensive.sh 0.01s user 0.00s system 96% cpu 0.014 total
Beachten Sie, dass die system
-Zeit im Vergleich zur user
-Zeit im Vergleich zu unserem CPU-intensiven Skript nun höher ist. Dies liegt daran, dass Datei-E/A-Operationen Systemaufrufe (system calls) erfordern, die im Kernelmodus ausgeführt werden. Der hohe CPU-Prozentsatz (96%) deutet darauf hin, dass das System die meiste Zeit während der Ausführung aktiv gearbeitet hat.
Lassen Sie uns auch einen gängigen Linux-Befehl timen, der nach Textmustern sucht:
time grep -r "root" /etc
Dieser Befehl sucht rekursiv nach dem Wort "root" in allen Dateien unter dem Verzeichnis /etc
. Die Ausgabe könnte wie folgt aussehen:
[many matches shown here]
grep -r "root" /etc 0.18s user 0.08s system 99% cpu 0.259 total
Vergleichen wir nun alle drei Befehle, die wir getimed haben:
simple_echo.sh
: Sehr schnelle Ausführung (0,001s total), minimale CPU- und Systemzeit.
cpu_intensive.sh
: Längere Ausführung (2,335s total), hauptsächlich User-CPU-Zeit (2,10s).
io_intensive.sh
: Moderate Ausführungszeit (0,014s total), ausgewogen zwischen User- und Systemzeit aufgrund von E/A-Operationen.
grep -r "root" /etc
: Moderate Ausführungszeit (0,259s total), ausgewogen zwischen User- und Systemzeit aufgrund von Textverarbeitung und Datei-E/A.
Dieser Vergleich zeigt, wie sich verschiedene Arten von Operationen auf die Ausführungszeit und die Ressourcennutzung auswirken. Das Verständnis dieser Muster kann Ihnen helfen, Engpässe in Ihren Skripten und Befehlen zu identifizieren, was zu effizienterem Code führt.