GNU/Linux >> Znalost Linux >  >> Linux

Zpomaluje je spouštění příkazů podrobně?

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/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

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).


Linux
  1. Linux – Co dělá „Make Localmodconfig“?

  2. Jsou nástroje Linuxu chytré při spouštění příkazů Piped?

  3. Jak převést příkazy do libovolného terminálu?

  1. Linux – Zpomalit kopírování disku/disku?

  2. Spouštění příkazů Linuxu na pozadí a v popředí

  3. Mac Terminal v[m] Editor Commands

  1. 5 Linuxových příkazů, které začnu používat

  2. Použití výstupu předchozích příkazů v bash

  3. Co znamená rc v souborech s tečkami