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: