Introducción
Con este tutorial vamos a aprender a tomar el tiempo que tardan nuestras funciones en ejecutar, así como los recursos que toman.
El módulo
Hay un módulo de perl que nos permitirá hacer esto, se llama Benchmark. Lo que vamos a hacer es medir el tiempo que tarda nuestro programa en ejecutar, y la cantidad de recursos que toma.
Hacer esto es sumamente importante, pues un buen programa debe de tomar el menor tiempo posible y debe de consumir la menor cantidad de recursos posibles, así que si puedes mejorarlo, hazlo.
Midiendo
Lo primero que debemos de hacer es cargar el módulo dentro de nuestro programa, eso lo hacemos con:
use Benchmark;
Ahora vamos a guardar el tiempo inicial y otra información dentro de una variable que vamos a llamar "$tiempo_inicial", lo cual haremos creando un nuevo objeto.
my $tiempo_inicial = new Benchmark;
Par hacer la prueba en este caso vamos a ejecutar un loop, dentro de un loop, hice esto para que tarde algunos segundos de manera que podamos ver realmente como funciona el Benchmark.
my $i = 0;
for($i = 0; $i < 10000; $i++){
my $c;
for($c = 0; $c < 1000; $c++){
my $d = $c + $i;
}
}
Después de haberse ejecutado nuestro loop, entonces crearemos otro objeto Benchmark, pero esta vez es para tomar las medidas al final de que nuestro código fue ejecutado.
my $tiempo_final = new Benchmark;
Ahora vamos a pedir el resultado de la diferencia de nuestras variables con un función de Benchmark que se llama "timediff".
my $tiempo_total = timediff($tiempo_final, $tiempo_inicial);
Ya finalmente tenemos lo que tomo y la cantidad de recursos que se llevo el ejecutar nuestro código, pero todo esta en números consecutivos que no tienen coherencia, es por ello que tenemos que ejecutar otra funcion de Benchmark llamada "timestr", para que nos muestre el resultado en algo que podamos entender:
print "El código tomo:",timestr($tiempo_total),"\n";
Interprentando el resultado
Al ejecutar el código en mi Latpot esto fue el resultado:
El código tomo: 8 wallclock secs ( 7.79 usr + 0.00 sys = 7.79 CPU)
Como vemos el código fue muy desgastante para mi procesador, la primera parte que dice "8 wallclock seconds" significa que tomo 8 segundos de nuestro tiempo, hay que recordar que los segundos del CPU pueden ser muy diferentes a los de nosotros, es por ello que dice "wallclock seconds", pues son segundos de un reloj común.
Y luego, el resultado final y más importante "7.79 CPU", esto es el porcentaje de CPU que uso el código, es por ello que digo que fue algo desgastante, y fue debido a las operaciones matemáticas que se estaban haciendo en el código.
¿Cuánto debe de tomar mi código en ejecutar?¿Cuántos recursos debería de usar?
Esas son preguntas que no puedo contestar, no todos los programas llevan la misma cantidad de tiempo o recursos, depende de muchos factores, como pueden ser la cantidad de funciones que hay, que tipo de operaciones estas haciendo, la rápidez de la computadora, etc...
Lo que si se, es que te conviene checar tu código por lo menos 2 o 3 veces antes de ponerlo como la versión final, siempre hay lugares donde puedes salvar un poco de tiempo o de recursos.