Los sistemas Unix tienen una utilidad de tiempo que le permite a un usuario ver dónde su aplicación tardó un tiempo significativo en procesarse. La sintaxis de esta utilidad es la siguiente:
time <command-to-be-timed>
Su resultado generalmente tiene tres categorías de la siguiente manera:
real <time> user <time> sys <time>
Usuario-CPU-Tiempo:
User-CPU-time es el tiempo que tarda el procesador en procesar el código en su aplicación. Generalmente se denomina que se ejecuta en el espacio del usuario en lugar de estar en el espacio del kernel . Cuando desarrolla su aplicación, habrá escrito construcciones de programación como condicionales, expresiones, declaraciones en bucle, bifurcaciones, etc. El tiempo dedicado al código real escrito por el cliente se mide a través de user-cpu-time .
Sistema-CPU-Tiempo:
System-CPU-time es el tiempo que tarda el proceso en procesar el código del núcleo. Cuando se programa una aplicación, los desarrolladores deben escribir en la salida del sistema , leer en la entrada del sistema y acceder a un recurso de disco local, como archivos, bases de datos , etc. proveer. El tiempo dedicado a esta ejecución generalmente se conoce como system-cpu-time .
Real:
El tiempo real es el tiempo total empleado a partir de la hora en que se inició la aplicación y la hora en que la aplicación realizó su tarea. También puede incluir el tiempo dedicado a esperar su turno para procesar o esperar recursos para la ejecución exitosa del programa.
Diferencias entre tiempo de CPU de usuario y tiempo de CPU de sistema:
S. No. |
usuario-cpu-tiempo |
sistema-cpu-tiempo |
---|---|---|
1. | Es la medida del tiempo que tarda la aplicación en ejecutar el código escrito por el usuario | Es la medida del tiempo que tarda una aplicación en ejecutar el código del kernel. |
2. | En los sistemas basados en Unix, generalmente se representa como ‘usuario’ en respuesta a la utilidad de tiempo. | En los sistemas basados en Unix, generalmente se representa como ‘sys’ en respuesta a la utilidad de tiempo. |
3. | El tiempo empleado puede ser analizado y optimizado por el usuario. | El tiempo que tarda el sistema depende de las llamadas al sistema del kernel subyacente. |
Por ejemplo:
#include<stdio.h> #include<sys/types.h> #include<stdlib.h> #include<unistd.h> int main() { int i=0; sleep(60); FILE* fpt; fpt = fopen("/home/test/file1.txt","w"); for(int i=0;i<10000000;i++) { printf(""); fprintf(fpt,"%d",i); } fclose(fpt); }
El código anterior primero duerme durante un minuto, abre un recurso de archivo en el disco y escribe la variable «i» hasta que el ciclo termina y no imprime nada en la consola. Finalmente, cierra el recurso de archivo abierto desde el disco.
Podemos compilar este código con:
gcc test.c
Esto crea un binario ./a.out
Ahora si corremos
time ./a.out
En los sistemas UNIX, puede generar una salida como se ve a continuación. El tiempo real puede variar de vez en cuando según la lógica del programa y la utilización de la CPU.
Producción:
real 1m0.557s user 0m0.452s sys 0m0.084s