Ano, podrobné spouštění zpomalí vaše aplikace.
Kolik závisí na aplikaci.
Každý tisk do terminálu bude vyžadovat delší dobu zpracování. V případě použití printf() nebo kterékoli z jeho sester je to poměrně velké množství odpadu při zpracování.
Terminál se také musí s těmito daty vypořádat. Mezi aplikací a terminálem je omezené množství vyrovnávací paměti a IO kanál se zablokuje, dokud v uvedené vyrovnávací paměti nebude dostatek místa pro skutečný výstup dat. Během blokování aplikace obecně nebude moci pokračovat.
Také akt zobrazení ladícího textu na terminálu bude vyžadovat cykly zpracování. Opět to závisí jak na aplikaci (množství ladění), terminálovém programu (použité fonty, efekty atd.) a dokonce i na používaném ovladači X windows (hardwarová akcelerace atd.).
time
program lze použít k poměrně přesnému určení, jak dlouho trvá spuštění příkazu. Spuštění stejného programu dvakrát v průběhu času, jednou s laděním a jednou bez, vám ukáže, jak velký rozdíl to znamená. Navrhoval bych spustit příkaz jednou před provedením testů, aby bylo zajištěno, že ukládání do mezipaměti je stejné pro oba testovací běhy příkazu. Nechcete zkreslit výsledky tím, že druhé spuštění proběhne mnohem rychleji, protože většina dat byla při prvním spuštění uložena do mezipaměti, že...
V případě vícevláknové aplikace se ve skutečnosti zablokuje pouze vlákno provádějící výstup ladění.
Záleží na aplikaci, kterou používáte. Obecně však můžeme říci, že upovídanost zpomalí většinu běžných linuxových aplikací, protože musí synchronizovat své akce mezi stdout a I/O nebo procesorovými hranicemi.
Pomocí yes
jako testovací případ na OS X 10.7 se zdá, že skutečně záleží na tom, zda tisknete velké množství výstupu na terminál, jak by se dalo očekávat.
Když jsem to vyčíslil trochu dále, spustil jsem yes
po dobu 5 sekund, v jednom případě tisk výstupu na terminál a jeho uložení do souboru (s tee
), v druhém případě udělejte totéž kromě přesměrování stdout
až /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
Případ 1. dává 2371584 řádky a případ 2. dává 136421376 řádků, tedy 57krát více. 'Výkon' yes
(měřeno počtem řádků, které vytiskne za jednotku času) je v tomto případě tedy 57krát pomalejší .
Jedna vedlejší poznámka je, že jsem použil yes
ve spojení s tee
zde, což může mírně ovlivnit výsledky, nicméně si myslím, že výsledky jsou stále platné.
Další známkou toho, že je program zpomalený, je běh yes
při výstupu na terminál terminál využívá přibližně 100 % CPU a yes
pouze kolem 37 %, zatímco běží yes
bez výstupu na terminál využívá plných 100 % (Toto je na vícejádrovém počítači, takže yes
mohl používat více CPU, pokud by to bylo možné, kromě toho, že byl zpomalen terminálem).