Pregunta

En primer lugar -. Esto no pretende ser una 'que es mejor, ignorantes hilo guerra no iónico' ... Pero la ayuda más bien, en general, tengo que tomar una decisión de la arquitectura / argumento para poner adelante a mi jefe

Omitiendo los detalles - que simplemente encantaría conocer y encontrar los resultados de cualquier persona que ha hecho algunas comparaciones de rendimiento de Shell vs [Insertar de uso general Lenguaje de programación (interpretada) aquí), como C # o Java ...

Sorprendentemente, he pasado algún tiempo en Google en busca aquí no encontrar ninguno de estos datos. Alguien ha hecho estas comparaciones, en diferentes casos de uso; golpear una base de datos como en un XYZ # de bucles haciendo diferentes tipos de SQL (pref Oracle, pero MSSQL haría) consulta tal como cualquiera de las operaciones CRUD - y además no golpear la base de datos y la comparación 50k tipo de bucle simplemente regular de hacer diferentes tipos de cálculos y cosas de esa naturaleza?

En particular - por ahora, necesito una comparación de golpear una base de datos Oracle desde un script de shell vs, digamos C # (de nuevo, ningún eso GPPL interpretados estaría bien, incluso los de más alto nivel como Python). Pero también necesito saber acerca de los cálculos estándar de programación / instrucciones / etc ...

Antes de preguntar '¿por qué no escribir una prueba rápida a ti mismo? La respuesta es: He sido un desarrollador de Windows toda mi vida / carrera y tener conocimiento de Shell scripting muy limitada - por no hablar de * nix en su conjunto .... Así que la pregunta aquí desde el más chicos experimentados serían grealty beneficiosa, por no mencionar el ahorro de tiempo ya que estamos en cerca de contracción plazo perputual tal como es;).

¿Fue útil?

Solución

Había una vez, Ye Olde El Gran Lenguaje de ordenadores tiroteo hizo incluir algunas secuencias de comandos shell.

Así que, por cortesía de la Internet Archive, a partir de 2004 -

Nota: los scripts de shell no tenía programas para muchas de las pruebas.

    Score Missing-Tests

Java 20     1

Perl 16     0

Python 16   0

gawk 12     6 

mawk 10     6 

bash 7      12  

Nota: scripts de shell a veces puede ser pequeño y rápido :-)

"Reverse un archivo"

        CPU (sec)   Mem (KB)    Lines Code

bash    0.0670      1464        1

C gcc   0.0810    4064        59

Python  0.3869    13160       6

Otros consejos

Depende de lo que el guión está haciendo altamente. He visto shell scripts mal escritos aceleraron por uno, dos y hasta tres órdenes de magnitud al hacer sencilla los cambios.

Típicamente, una secuencia de comandos shell es simplemente alguna lógica de pegamento que se ejecuta utilidades que por lo general se compilan C o C ++. Si ese es el caso, puede que no haya mucho que se puede hacer para acelerar las cosas. Si el trabajo duro está siendo realizado por una utilidad mal escrito que está compilado, que sólo está haciendo un gran esfuerzo desperdiciado muy rápido.

Dicho esto, Python o Perl van a ser mucho más rápido que un script de shell, pero un código de máquina virtual o nativo será más rápido todavía.

Ya que no nos puede decir cualquier detalle, realmente no podemos proporcionar ayuda específica.

Si desea ver una demostración sencilla para la comparación, prueba mi aplicación pura-Bash de hexdump y compararlo con la cosa real:

$ time ./bash-hexdump /bin/bash > /dev/null
real    7m17.577s
user    7m2.570s
sys     0m14.745s
$ time hexdump -C /bin/bash > /dev/null
real    0m2.459s
user    0m2.260s
sys     0m0.176s

Una de las principales razones de la versión de Bash es lenta es que se lee el carácter a carácter archivo que es necesario bytes nulos mango (conchas no son muy buenos en el manejo de datos binarios), pero la razón principal es la velocidad de ejecución. Aquí está un ejemplo de una secuencia de comandos de Python encontré :

$ time ./hexdump.py /bin/bash > /dev/null
real    0m11.694s
user    0m11.605s
sys     0m0.040s

Yo simplemente encantaría conocer y encontrar los resultados de cualquier persona que tiene hecho algunas comparaciones de rendimiento de ...

La lección perdurable de estas comparaciones es que los detalles particulares de materia -. Un montón

No sólo los detalles particulares de la tarea, pero (en caso de no sabemos esto como programadores) los detalles particulares de cómo el shell script está escrito.

Así se puede encontrar a alguien que entiende que el lenguaje de shell y puede comprobar que la secuencia de comandos shell fue escrito de una manera eficiente? (¿No sería bueno si el cambio de un par de líneas tomó de 40 minutos a 5 minutos.)

Si bien esto no incluye "Shell" (también conocido como sh / bash / ksh / PowerScript) idiomas, es una relativamente larga lista de "lenguaje de ejecución [aplicación]" - lleno de generalidades y advertencias. En cualquier caso, alguien puede disfrutar de ella.

http://benchmarksgame.alioth.debian.org/

Si está escribiendo código y que tiene preocupaciones acerca de la velocidad de procesamiento, usted debe escribir código que se compila ya sea directamente o compilado para el montaje de una máquina virtual moderna.

Pero ... con la Ley de Moore levantando la potencia de procesamiento cada 18 meses, me pregunto: ¿son los requisitos de rendimiento realmente necesario? Incluso interpretado carreras de código increíblemente rápido en la mayoría de los sistemas modernos, y que sólo va a mejorar con el tiempo. Lo que realmente necesita el tipo de mejoras en la velocidad que el código compilado le daría?

Si la respuesta es no, entonces escribir en lo que te hace feliz.

Como se mencionó anteriormente, usted no será capaz de hacer consultas SQL a partir de la cáscara. Idiomas que se ejecuta en una máquina virtual tendrá un poco de tiempo por adelantado debido al factor VM pero por lo demás la diferencia debería ser insignificante.

Si la pregunta realmente es disminuir desde 40 a 5 minutos en los que voy a tratar de averiguar qué pieza se está llevando a la mayoría de las veces. Si la consulta se ejecuta durante más tiempo entonces el lenguaje de conmutación no le ayudará mucho.

Una vez más (sin mucho detalle en la pregunta) que comenzaría con mirar en diferentes componentes del sistema para ver cuál es el cuello de botella.

Así lo hizo muy simple referencia en mi sistema, y ??son como se espera los resultados.

Sume todos los números enteros entre 1 y 50.000 y respuesta de salida en cada paso

Bash: 3 segundos C: 0,5 segundos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top