[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: rendimiento de scripts



El mié, 15-08-2007 a las 11:47 -0300, Matías Bellone escribió:
> On 8/15/07, Iñigo Tejedor Arrondo <txiuaua@telefonica.net> wrote:
> > Hola,
> >
> > Al hilo de obtener la carga de cpu, me ha surgido una duda de la que
> > siempre he odido hablar. Siempre se ha dicho que un programa en C, es
> > más rápido que un script grande... Incluso en gentoo había un proyecto
> > para migrar los scripts de arranque a programas en C con ficheros de
> > configuración, percisamente para optimizar el tiempo de arranque...
> >
> > El caso es que si nos ponemos manos a la obra:
> > No es más rápido. Imagino que porque cat, depende de las mismas tres
> > librerias que dependía holamundo. He probado el holamundo compilado de
> > manera estática y también con optimización de nivel 2 y 3, pero siempre
> > es más lento.
> >
> > No tengo capacidad ni ganas para transcribir un script grande (digamos
> > p.ej. de más de 100 lineas y que llame a otros scripts) a C en estado
> > puro, usando solo librerías y no programas externos, pero...
> >
> > ¿es realmente C más rápido que bash? ¿o depende de las circunstancias?
> 
> La eficiencia de un programa no depende tanto del lenguaje sino como
> de la implementación en sí. Un algoritmo de ordenación escrito en el
> lenguaje que sea va a ser lento si el algoritmo es malo o se lo
> compara con el archi-conocido "sort" por la simple razón de que éste
> último es un proyecto maduro y ultra-optimizado para hacer muy bien lo
> que hace.
> 
> En cuanto a tu pregunta, es muy probable que el echo que hayas
> utilizado sea un built-in de bash y no el comando en sí. Si es así,
> entonces la diferencia en rendimiento es muy probable que sea porque
> no hace falta cargar un ejecutable y hacer cambios de contexto y todo
> eso sino simplemente que bash se encarga de todo. Si no es así,
> entonces podríamos volver al caso anterior en el que echo es una
> aplicación muy bien optimizada para hacer lo que hace.
> 
> Una prueba interesante sería hace que se imprima 1000 veces el mismo
> string. Con un bucle dentro del programa en C y aprovechando un "for"
> de bash y comparar el rendimiento de eso. Cuando estamos haciendo
> mediciones, siempre es bueno probar diferentes situaciones
> repetitivamente para minimizar influencias externas y más veces
> todavía cuando lo que estamos midiendo es tan pequeño y no disponemos
> de formas de "calibrar" los instrumentos de medida.

Gracias por la execelente respuesta, ahora y depués de esta prueba, ya
lo tengo más claro:

Bucle for, en bash:

Con una repetición:
real    0m0.001s
user    0m0.000s
sys     0m0.000s

Con incremento hasta 100:
real    0m0.005s
user    0m0.004s
sys     0m0.000s

Con incremento hasta 100.000:
real    0m1.784s
user    0m0.228s
sys     0m0.020s




Bucle for, en C:

Con una repetición:
real    0m0.001s
user    0m0.000s
sys     0m0.000s

Con incrmento hasta 100:
real    0m0.001s
user    0m0.000s
sys     0m0.000s

Con incremento hasta 100.000:
real    0m0.130s
user    0m0.004s
sys     0m0.012s

Es decir, a mayor complejidad, más rápido parece ser el C. Siempre lo
había oido decir, pero hasta que no lo he comprobado, no me he quedado
tranquilo :)

> Saludos,
> Toote

Saludos y gracias.



Reply to: