GNU/Linux >> Linux Esercitazione >  >> Linux

L'esecuzione dei comandi in modo dettagliato li rende più lenti?

Sì, l'esecuzione di verbose rallenterà le tue applicazioni.

Quanto dipende dall'applicazione.

Ogni stampa sul terminale richiederà tempi di elaborazione aggiuntivi. Nel caso dell'utilizzo di printf() o di una qualsiasi delle sue sorelle, si tratta di una notevole quantità di elaborazione sprecata.

Inoltre, il terminale deve gestire quei dati. C'è una quantità limitata di spazio buffer tra l'applicazione e il terminale e il canale IO si bloccherà fino a quando non ci sarà spazio sufficiente in detto buffer per emettere effettivamente i dati. L'applicazione generalmente non sarà in grado di continuare mentre è in corso questo blocco.

Inoltre, l'atto di visualizzare il testo di debug sul terminale consumerà cicli di elaborazione. Ancora una volta, questo dipende sia dall'applicazione (la quantità di debug), dal programma terminale (caratteri utilizzati, effetti, ecc.) che persino dal driver X Windows in uso (accelerazione hardware, ecc.).

Il time programma può essere utilizzato per determinare in modo abbastanza accurato quanto tempo ha impiegato l'esecuzione di un comando. Eseguire lo stesso programma due volte nel tempo, una volta con il debug e una volta senza, ti mostrerà quanta differenza fa. Suggerirei di eseguire il comando una volta prima di eseguire i test per garantire che la memorizzazione nella cache sia la stessa per entrambe le esecuzioni di test del comando. Non vuoi distorcere i risultati facendo in modo che la seconda esecuzione vada molto più veloce perché la maggior parte dei dati è stata memorizzata nella cache dalla prima esecuzione ora, vero...

Nel caso di un'applicazione multithread, verrà effettivamente bloccato solo il thread che esegue l'output di debug.


Dipende dall'applicazione che stai utilizzando. Tuttavia, in generale, possiamo affermare che verbose rallenterà le applicazioni Linux più comuni poiché devono sincronizzare le loro azioni tra stdout e I/O o i limiti del processore.


Usando yes come test case su OS X 10.7, sembra davvero importante se si stampa molto output sul terminale, come ci si aspetterebbe.

Quantificandolo un po' di più, ho eseguito yes per 5 secondi, in un caso stampando l'output sul terminale e salvandolo in un file (con tee ), nell'altro caso facendo lo stesso tranne reindirizzando stdout a /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

Caso 1. restituisce 2371584 linee e caso 2. dà 136421376 linee, o 57 volte di più. La 'prestazione' di yes (misurato dalla quantità di righe che stampa per unità di tempo) è in questo caso quindi 57 volte più lento .

Una nota a margine qui è che ho usato yes insieme a tee qui, che potrebbe influenzare leggermente i risultati, tuttavia penso che i risultati siano ancora validi.

Un'altra indicazione che il programma è rallentato è l'esecuzione di yes durante l'output su un terminale, il terminale utilizza circa il 100% della CPU e yes solo il 37% circa durante l'esecuzione di yes senza eseguire l'output su un terminale utilizza l'intero 100% (questo è su una macchina multi-core, quindi yes potrebbe utilizzare più CPU se fosse in grado di farlo, tranne per il fatto che è stato rallentato dal terminale).


Linux
  1. Le utilità Linux sono intelligenti quando si eseguono comandi convogliati?

  2. Come inviare comandi a qualsiasi terminale?

  3. Linux – Rendi più lenta la copia del disco/disco?

  4. Utilizzo dell'output dei comandi precedenti in bash

  5. In esecuzione per i comandi del terminale loop in Jupyter

Kmdr – Visualizza la spiegazione dei comandi CLI nel terminale

Undistract-me:ricevi una notifica quando vengono completati i comandi del terminale di lunga durata

5 comandi divertenti da usare in Linux e Terminal

I 50 comandi Linux più utili da eseguire nel terminale

RHCE Ansible Series #2:Esecuzione di comandi ad hoc

Come rendere eseguibile un file nel terminale Linux?