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
:
yes | tee yeslog_term & sleep 5 && killall yes && wc -l yeslog_term
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).