GNU/Linux >> Tutoriales Linux >  >> Linux

¿Ejecutar comandos detalladamente los hace más lentos?

Sí, ejecutar verbose ralentizará sus aplicaciones.

Cuánto depende de la aplicación.

Cada impresión a la terminal requerirá tiempo de procesamiento adicional. En el caso de usar printf() o cualquiera de sus hermanas, se desperdicia una gran cantidad de procesamiento.

Además, el terminal tiene que lidiar con esos datos. Hay una cantidad limitada de espacio de búfer entre la aplicación y el terminal, y el canal IO se bloqueará hasta que haya suficiente espacio en dicho búfer para generar los datos. Por lo general, la aplicación no podrá continuar mientras se lleva a cabo este bloqueo.

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 de terminal (fuentes utilizadas, efectos, etc.) e incluso el controlador de X Windows en uso (aceleración de hardware, etc.).

El time El programa se puede utilizar 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 con depuración y otra 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 haciendo que la segunda ejecución sea mucho más rápida porque la mayoría de los datos se almacenaron en caché en la primera ejecución, ¿verdad?...

En el caso de una aplicación de subprocesos múltiples, solo se bloqueará el subproceso que realiza la salida de depuración.


Depende de la aplicación que esté ejecutando. Sin embargo, en general, podemos decir que verbose ralentizará las aplicaciones Linux más comunes, ya que deben sincronizar sus acciones entre la salida estándar y la E/S o los límites del procesador.


Usando yes como caso de prueba en OS X 10.7, parece que sí importa si imprime muchos resultados en la terminal, como cabría esperar.

Cuantificando esto un poco más, ejecuté yes durante 5 segundos, en un caso imprimiendo la salida a la terminal y guardándola en un archivo (con tee ), en el otro caso haciendo lo mismo excepto redirigir 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. da 2371584 líneas y caso 2. da 136421376 líneas, o 57 veces más. El 'rendimiento' de yes (medido por la cantidad de líneas que imprime por unidad de tiempo) es en este caso 57 veces más lento .

Una nota al margen aquí es que usé yes junto con tee aquí, lo que podría influir ligeramente en los resultados, sin embargo, creo que los resultados siguen siendo válidos.

Otra indicación de que el programa se ralentiza es que ejecuta yes mientras se envía a una terminal, la terminal usa alrededor del 100 % de la CPU y yes solo alrededor del 37%, mientras se ejecuta yes sin enviar a una terminal, usa el 100% completo (Esto es en una máquina de varios núcleos, por lo que yes podría usar más CPU si pudiera, excepto que la terminal lo ralentizó).


Linux
  1. 5 comandos de Linux que voy a empezar a usar

  2. Linux – ¿Qué hace 'hacer Localmodconfig'?

  3. ¿Cómo canalizar comandos a cualquier terminal?

  4. Comandos del editor de Mac Terminal vi[m]

  5. Usando la salida de comandos anteriores en bash

Kmdr:mostrar la explicación de los comandos CLI en la terminal

Undistract-me:Reciba una notificación cuando se completen los comandos de terminal de ejecución prolongada

5 divertidos comandos para usar en Linux y Terminal

Los 50 comandos de Linux más útiles para ejecutar en la terminal

Serie RHCE Ansible n.º 2:Ejecución de comandos ad-hoc

¿Cómo hacer un archivo ejecutable en la terminal de Linux?