El mié, 15-08-2007 a las 11:47 -0300, Matías Bellone escribió: > On 8/15/07, Iñigo Tejedor Arrondo <[EMAIL PROTECTED]> 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. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

