GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Macht das Ausführen von Befehlen sie langsamer?

Ja, die Ausführung von verbose verlangsamt Ihre Anwendungen.

Wie viel hängt von der Anwendung ab.

Jeder Druck an das Terminal erfordert zusätzliche Verarbeitungszeit. Im Fall der Verwendung von printf() oder einer seiner Schwestern ist dies eine ziemlich große Menge an Verarbeitungsverschwendung.

Außerdem muss das Terminal mit diesen Daten umgehen. Es gibt eine begrenzte Menge an Pufferplatz zwischen der Anwendung und dem Terminal, und der E/A-Kanal blockiert, bis genug Platz in dem Puffer vorhanden ist, um die Daten tatsächlich auszugeben. Während dieser Blockierung kann die Anwendung im Allgemeinen nicht fortgesetzt werden.

Außerdem wird der Vorgang des Anzeigens des Debugging-Textes auf dem Terminal Verarbeitungszyklen verbrauchen. Auch dies hängt sowohl von der Anwendung (Debugging-Umfang), dem Terminalprogramm (verwendete Schriftarten, Effekte usw.) als auch vom verwendeten X-Windows-Treiber (Hardwarebeschleunigung usw.) ab.

Der time Programm kann verwendet werden, um ziemlich genau zu bestimmen, wie lange die Ausführung eines Befehls gedauert hat. Das zweimalige Ausführen des gleichen Programms, einmal mit Debugging und einmal ohne, wird Ihnen zeigen, wie viel Unterschied es macht. Ich würde vorschlagen, den Befehl einmal auszuführen, bevor Sie die Tests durchführen, um sicherzustellen, dass das Caching für beide Testläufe des Befehls gleich ist. Sie wollen die Ergebnisse nicht verfälschen, indem Sie den zweiten Durchlauf viel schneller machen, weil die meisten Daten beim ersten Durchlauf zwischengespeichert wurden, oder...

Im Fall einer Multithread-Anwendung wird tatsächlich nur der Thread blockiert, der die Debugging-Ausgabe durchführt.


Es hängt von der Anwendung ab, die Sie ausführen. Im Allgemeinen können wir jedoch sagen, dass verbose die meisten gängigen Linux-Anwendungen verlangsamt, da sie ihre Aktionen zwischen stdout und I/O- oder Prozessorgrenzen synchronisieren müssen.


Mit yes Als Testfall unter OS X 10.7 scheint es tatsächlich wichtig zu sein, wenn Sie viele Ausgaben auf dem Terminal ausgeben, wie man es erwarten würde.

Um dies etwas weiter zu quantifizieren, habe ich yes ausgeführt für 5 Sekunden, in einem Fall die Ausgabe auf dem Terminal ausdrucken und in einer Datei speichern (mit tee ), im anderen Fall dasselbe tun, außer stdout umzuleiten bis /dev/null :

  1. yes | tee yeslog_term & sleep 5 && killall yes && wc -l yeslog_term
  2. yes | tee yeslog_noterm > /dev/null & sleep 5 && killall yes && wc -l yeslog_noterm

Fall 1. ergibt 2371584 Linien und Fall 2. ergibt 136421376 Zeilen oder 57-mal mehr. Die 'Leistung' von yes (gemessen an der Anzahl der pro Zeiteinheit gedruckten Zeilen) ist in diesem Fall also 57 mal langsamer .

Eine Randnotiz hier ist, dass ich yes verwendet habe in Verbindung mit tee hier, was die Ergebnisse leicht beeinflussen könnte, aber ich denke, dass die Ergebnisse immer noch gültig sind.

Ein weiterer Hinweis darauf, dass das Programm verlangsamt wird, ist die Ausführung von yes während der Ausgabe an ein Terminal verbraucht das Terminal etwa 100 % CPU und yes nur etwa 37 %, während yes ausgeführt wird ohne Ausgabe an ein Terminal werden die vollen 100 % verwendet (Dies ist auf einer Multi-Core-Maschine, also yes könnte mehr CPU verbrauchen, wenn es möglich wäre, außer es wurde durch das Terminal verlangsamt).


Linux
  1. 5 Linux-Befehle, die ich verwenden werde

  2. Linux – Was macht ‚make Localmodconfig‘?

  3. Was bedeutet rc in Punktdateien

  4. Ausführen von for-Loop-Terminalbefehlen in Jupyter

  5. Machen Sie das Kopieren von Datenträgern/Datenträgern langsamer

Kmdr – Zeigt die Erklärung der CLI-Befehle im Terminal an

Undistract-me :Erhalten Sie eine Benachrichtigung, wenn lang andauernde Terminalbefehle abgeschlossen sind

5 lustige Befehle zur Verwendung in Linux und Terminal

Die 50 nützlichsten Linux-Befehle zum Ausführen im Terminal

RHCE Ansible Series #2:Ausführen von Ad-hoc-Befehlen

Wie mache ich eine Datei im Linux-Terminal ausführbar?