Eu me peguei usando a -v
flag para muitas aplicações cada vez menos (especialmente para coisas triviais como tar
e cp
). No entanto, quando fiz e descompactei um arquivo grande, levaria mais tempo do que quando não usei o -v
sinalizador.
Suponho que isso ocorre porque o terminal precisa processar o texto e estou preenchendo qualquer buffer que possa ter. Mas minha pergunta é: isso torna o aplicativo realmente mais lento ou é concluído na mesma quantidade de tempo e o que estou vendo é que o terminal está tentando recuperar o atraso?
tar xvf file.tar > /dev/null
vs.tar xf file.tar
? Redirecionar para/dev/null
deve tirar seu terminal disso.stdout
estderr
são com buffer de linha - o que significa que o preenchimento de buffers não leva tanto tempo - são asprintf
chamadas de bloqueio (e pela saída do terminal de extensão) que levam uma eternidade.Respostas:
Sim, a execução detalhada reduzirá a velocidade de seus aplicativos.
Quanto depende da aplicação.
Toda impressão no terminal exigirá tempo de processamento extra. No caso de usar printf () ou qualquer uma de suas irmãs, essa é uma quantidade bastante pesada de processamento desperdiçado.
Além disso, o terminal precisa lidar com esses dados. Há uma quantidade limitada de espaço no buffer entre o aplicativo e o terminal, e o canal IO será bloqueado até que haja espaço suficiente no referido buffer para realmente enviar os dados. O aplicativo geralmente não poderá continuar enquanto esse bloqueio estiver ocorrendo. 1 1
Além disso, o ato de exibir o texto de depuração no terminal consumirá ciclos de processamento. Novamente, isso depende da aplicação (a quantidade de depuração), do programa do terminal (fontes usadas, efeitos, etc.) e até do driver do Windows X em uso (aceleração de hardware, etc.).
O
time
programa pode ser usado para determinar com bastante precisão quanto tempo um comando levou para ser executado. A execução do mesmo programa duas vezes no tempo, uma vez com depuração e outra sem, mostrará a diferença. Sugiro executar o comando uma vez antes de executar os testes para garantir que o cache seja o mesmo para as duas execuções de teste do comando. Você não deseja distorcer os resultados fazendo com que a segunda execução seja muito mais rápida, porque a maioria dos dados foi armazenada em cache pela primeira execução agora.1 No caso de um aplicativo multithread, apenas o thread que executa a saída de depuração será realmente bloqueado.
fonte
dir c:\/s/a
. Você pode ver a velocidade mudar quando estiver completamente visível e parcialmente coberta. Você não pode vê- lo acelerar quando minimizado, mas é definitivamente mais rápido, embora você precise reiniciar se quiser testar, a fim de ignorar o cache que faria com que fosse mais rápido de qualquer maneira, já que não teria para acessar o disco.Depende do aplicativo que você está executando. No entanto, em geral, podemos dizer que o detalhado abrandará os aplicativos Linux mais comuns, pois eles devem sincronizar suas ações entre stdout e E / S ou limites do processador.
fonte
Usando
yes
como um caso de teste no OS X 10.7, parece realmente importante se você imprimir muita saída no terminal, como seria de esperar.Quantificando isso um pouco mais, corri
yes
por 5 segundos, em um caso imprimindo a saída no terminal e salvando-a em um arquivo (comtee
), no outro caso, fazendo o mesmo, exceto redirecionandostdout
para/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
O caso 1. fornece 2371584 linhas e o caso 2. fornece 136421376 linhas, ou 57 vezes mais. O 'desempenho' de
yes
(medido pela quantidade de linhas impressas por unidade de tempo) é, nesse caso, 57 vezes mais lento .Uma observação lateral aqui é que eu usei
yes
em conjunto comtee
aqui, o que pode influenciar um pouco os resultados, no entanto, acho que os resultados ainda são válidos.Outra indicação de que o programa está mais lento é que, rodando
yes
durante a saída para um terminal, o terminal usa cerca de 100% da CPU eyes
apenas cerca de 37%, enquanto rodandoyes
sem saída para um terminal, ele usa 100% (Isso é feito em máquina principal, entãoyes
poderia usar mais CPU, se fosse capaz, exceto pelo fato de ter sido mais lento pelo terminal).fonte
É fácil apenas responder que sim, isso atrasará o aplicativo. Mas uma resposta muito mais verdadeira é que não importará em 99% dos casos.
Se o seu aplicativo estiver realizando algum tipo de trabalho que realmente consome alguma energia da CPU, as chances de imprimir algumas linhas de texto extras na tela fazendo qualquer tipo de diferença são próximas de 0%.
Na verdade, você pode facilmente fazer seu próprio julgamento: se o aplicativo estiver lançando uma imensa parede de texto, poderá custar um pouco. Talvez.
fonte
printf()
é insanamente caroUm código detalhado é geralmente avaliado com uma instrução if e toda vez que passa o controle para uma função de exibição, quanto mais tempo leva, o contexto pode ser alterado, mais interrupções.
Mas isso depende, se o código detalhado for um encadeamento separado que está apenas verificando o estado de conclusão de tempos em tempos, a diferença é negligenciável.
Esta questão pode se beneficiar muito da contribuição dos programadores experientes do stackoverflow. Sugiro mudar :)
fonte