Me he encontrado usando la -v
bandera para muchas aplicaciones cada vez menos (especialmente para cosas triviales como tar
y cp
). Sin embargo, cuando lo hice y estaba, por ejemplo, descomprimiendo un archivo grande, me llevó más tiempo que cuando no usé la -v
bandera.
Supongo que esto se debe a que el terminal tiene que procesar el texto y estoy llenando cualquier búfer que pueda tener. Pero mi pregunta es, ¿esto hace que la aplicación se ejecute más lentamente o se completa en la misma cantidad de tiempo y lo que veo es que el terminal intenta ponerse al día?
tar xvf file.tar > /dev/null
frentetar xf file.tar
? Redirigir a/dev/null
debería sacar su terminal de esto.stdout
ystderr
están con buffer de línea , lo que significa que llenar los buffers no toma tanto tiempo, son lasprintf
llamadas de bloqueo (y por la salida del terminal de extensión) lo que toma una eternidad.Respuestas:
Sí, ejecutar verbose ralentizará sus aplicaciones.
Cuánto depende de la aplicación.
Cada impresión en el terminal requerirá un tiempo de procesamiento adicional. En el caso de usar printf () o cualquiera de sus hermanas, esta es una gran cantidad de procesamiento desperdiciado.
Además, el terminal tiene que lidiar con esos datos. Hay una cantidad limitada de espacio en el búfer entre la aplicación y el terminal, y el canal de E / S se bloqueará hasta que haya suficiente espacio en dicho búfer para emitir los datos. Por lo general, la aplicación no podrá continuar mientras se realiza este bloqueo. 1
Además, el acto de mostrar el texto de depuración en el terminal consumirá ciclos de procesamiento. Nuevamente, esto depende tanto de la aplicación (la cantidad de depuración), el programa del terminal (fuentes utilizadas, efectos, etc.) e incluso el controlador X windows en uso (aceleración de hardware, etc.).
El
time
programa se puede usar para determinar con bastante precisión cuánto tiempo ha tardado en ejecutarse un comando. Ejecutar el mismo programa dos veces a lo largo del tiempo, una vez con depuración y una vez sin, le mostrará la diferencia que hace. Sugeriría ejecutar el comando una vez antes de realizar las pruebas para garantizar que el almacenamiento en caché sea el mismo para ambas ejecuciones de prueba del comando. No desea sesgar los resultados al hacer que la segunda ejecución vaya mucho más rápido porque la mayoría de los datos fueron almacenados en caché por la primera ejecución ahora, ¿no ...1 En el caso de una aplicación multiproceso, solo se bloqueará el hilo que realiza la salida de depuración.
fuente
dir c:\/s/a
. Puede ver el cambio de velocidad cuando es completamente visible y parcialmente cubierto. No puede ver que se acelera cuando se minimiza, pero definitivamente es más rápido, aunque tendría que reiniciar si quisiera probar, para evitar el almacenamiento en caché, lo que lo haría más rápido de todos modos, ya que no habría para acceder al disco.Depende de la aplicación que esté ejecutando. Sin embargo, en general, podemos decir que verbose ralentizará las aplicaciones de Linux más comunes, ya que deben sincronizar sus acciones entre stdout y E / S o límites del procesador.
fuente
Utilizando
yes
como un caso de prueba en OS X 10.7, parece que realmente importa si imprime una gran cantidad de resultados en el terminal, como era de esperar.Cuantificando esto un poco más, ejecuté
yes
durante 5 segundos, en un caso imprimí la salida en el terminal y la guardé en un archivo (contee
), en el otro caso hice lo mismo excepto redirigirstdout
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
El caso 1. da 2371584 líneas y el caso 2. da 136421376 líneas, o 57 veces más. En este caso, el "rendimiento" de
yes
(medido por la cantidad de líneas que imprime por unidad de tiempo) es 57 veces más lento .Una nota al margen aquí es que utilicé
yes
junto contee
aquí, lo que podría influir ligeramente en los resultados, sin embargo, creo que los resultados aún son válidos.Otra indicación de que el programa se ralentiza es que se ejecuta
yes
mientras se emite a un terminal, el terminal usa alrededor del 100% de CPU yyes
solo alrededor del 37%, mientras se ejecutayes
sin salir a un terminal, usa el 100% completo (esto es en un multi- núcleo de la máquina, por lo queyes
podría usar más CPU si pudiera, excepto que el terminal lo desaceleró).fuente
Es fácil responder que sí, ralentizará la aplicación. Pero una respuesta mucho más verdadera es que no importará en el 99% de los casos.
Si su aplicación está haciendo algún tipo de trabajo que realmente requiere algo de energía de la CPU, las posibilidades de imprimir algunas líneas de texto adicionales en la pantalla que marquen algún tipo de diferencia son cercanas al 0%.
De hecho, puede hacer su propio juicio fácilmente: si la aplicación está arrojando un inmenso muro de texto, en realidad podría costarle un poco. Tal vez.
fuente
printf()
es increíblemente caroUn código detallado generalmente se evalúa con una instrucción if y cada vez que pasa el control a una función de visualización, más tiempo tarda, el contexto puede cambiar, más interrupciones.
Pero depende, si el código detallado es un hilo separado que solo verifica el estado de finalización de vez en cuando, la diferencia es despreciable.
Esta pregunta puede beneficiarse mucho de la contribución de los programadores experimentados de stackoverflow. Sugiero mudarse :)
fuente