Je me suis retrouvé à utiliser le -v
drapeau pour de nombreuses applications de moins en moins (en particulier pour des choses triviales comme tar
et cp
). Cependant, lorsque je décompressais un fichier volumineux, cela prendrait plus de temps que lorsque je n’utilisais pas le -v
drapeau.
Je suppose que cela est dû au fait que le terminal doit traiter le texte et que je remplis le tampon dont il dispose. Mais ma question est la suivante: l’application est-elle réellement ralentie ou s’achève-t-elle dans le même laps de temps et ce que je constate est que le terminal tente de rattraper son retard?
tar xvf file.tar > /dev/null
contretar xf file.tar
? La redirection vers/dev/null
devrait sortir votre terminal de cela.stdout
etstderr
sont mis en tampon de ligne - ce qui signifie que le remplissage des tampons ne prend pas si longtemps - ce sont lesprintf
appels bloquants (et par la sortie du terminal d'extension) qui durent éternellement.Réponses:
Oui, exécuter verbose ralentira vos applications.
Combien dépend de l'application.
Chaque impression sur le terminal nécessitera un temps de traitement supplémentaire. Dans le cas où vous utilisez printf () ou l’une de ses sœurs, cela représente une perte de temps considérable en termes de traitement.
En outre, le terminal doit traiter ces données. Il existe une quantité limitée d’espace tampon entre l’application et le terminal, et le canal IO se bloque jusqu’à ce qu’il y ait suffisamment d’espace dans ledit tampon pour sortir les données. L’application ne pourra généralement pas continuer tant que ce blocage est en cours. 1
En outre, le fait d'afficher le texte de débogage sur le terminal consommera des cycles de traitement. Là encore, cela dépend à la fois de l’application (la quantité de débogage), du programme du terminal (polices utilisées, effets, etc.) et même du pilote X Windows utilisé (accélération matérielle, etc.).
Le
time
programme peut être utilisé pour déterminer avec assez de précision le temps d’exécution d’une commande. Exécuter le même programme deux fois dans le temps, une fois avec le débogage et une fois sans, vous montrera toute la différence que cela fait. Je suggérerais d'exécuter la commande une fois avant d'effectuer les tests pour s'assurer que la mise en cache est la même pour les deux exécutions de test de la commande. Vous ne voulez pas fausser les résultats en faisant en sorte que la deuxième exécution soit beaucoup plus rapide, car la plupart des données ont été mises en cache lors de la première exécution ...1 Dans le cas d'une application multithread, seul le thread qui exécute la sortie de débogage sera réellement bloqué.
la source
dir c:\/s/a
. Vous pouvez voir le changement de vitesse quand il est complètement visible et partiellement couvert. Vous ne pouvez pas voir s’accélérer lorsque minimisé, mais c’est nettement plus rapide, bien que vous deviez redémarrer si vous souhaitez tester, afin de contourner la mise en cache, ce qui le ferait de toute façon plus rapidement, car cela n’aurait pas été possible. accéder au disque.Cela dépend de l'application que vous utilisez. Cependant, en règle générale, nous pouvons dire que verbose ralentira les applications Linux les plus courantes car elles doivent synchroniser leurs actions entre stdout et les limites d'E / S ou de processeur.
la source
En utilisant
yes
comme scénario de test sur OS X 10.7, il semble que le fait d’imprimer de nombreuses sorties sur le terminal, comme on pouvait s’y attendre, semble vraiment important.Pour quantifier cela un peu plus loin, j'ai couru
yes
pendant 5 secondes, dans un cas, imprimant la sortie sur le terminal et l'enregistrant dans un fichier (avectee
), dans l'autre cas, procédant de même, sauf en redirigeantstdout
vers/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
Le cas 1. donne 2371584 lignes et le cas 2. donne 136421376 lignes, soit 57 fois plus. La «performance» de
yes
(mesurée par le nombre de lignes imprimées par unité de temps) est dans ce cas donc 57 fois plus lente .Une note de côté ici est que j'ai utilisé
yes
en conjonction avectee
ici, ce qui pourrait influencer légèrement les résultats, mais je pense que les résultats sont toujours valables.Une autre indication du ralentissement du programme est que,
yes
lorsqu’il exécute la sortie sur un terminal, celui-ci utilise environ 100% de la CPU etyes
seulement environ 37%, tandis qu’il exécuteyes
sans générer de sortie vers un terminal machine principale, doncyes
pourrait utiliser plus de CPU si elle était capable, sauf qu'il a été ralenti par le terminal).la source
Il est facile de répondre que oui, cela ralentira l'application. Mais une réponse beaucoup plus vraie est que cela n’a aucune importance dans 99% des cas.
Si votre application effectue tout type de travail nécessitant un peu de puissance du processeur, les chances d’imprimer quelques lignes de texte supplémentaires sur l’écran, ce qui fait toute différence, est proche de 0%.
En fait, vous pouvez facilement faire votre propre jugement: si l'application crache un immense mur de texte, cela pourrait vous coûter un petit peu. Peut être.
la source
printf()
est incroyablement cherUn code commenté est généralement évalué avec une instruction if et chaque fois qu'il passe le contrôle à une fonction d'affichage, plus le temps pris est long, plus le contexte peut être changé, plus il y a d'interruptions.
Mais cela dépend, si votre code prolixe est un fil séparé qui ne fait que vérifier l’état d’achèvement, la différence est négligeable.
Cette question peut grandement bénéficier de la contribution des programmeurs expérimentés de stackoverflow. Je suggère de déménager :)
la source