2009-04-29 35 views
64

Siempre he pensado que las ventajas de Python son la lectura de código y la velocidad de desarrollo, pero el uso de tiempo y memoria no eran tan buenos como los de C++.¿Python es más rápido y ligero que C++?

These stats me ha impresionado mucho.

¿Qué le dice su experiencia sobre el uso de tiempo y memoria de Python vs C++?

+14

Así que Pyhton es para la mayoría de estos casos más lento y usa más RAM pero la fuente es más pequeña. ¿Cuál es el problema exactamente? – nuriaion

+2

Supongo que malinterpreté los resultados. – Alex

+4

¡Lo que es realmente interesante es que las pruebas C++ son aún "mejores" que las C! – gbjbaanb

Respuesta

177

Creo que estás leyendo esas estadísticas incorrectamente. Muestran que Python es hasta aproximadamente 400 veces más lento que C++ y, con la excepción de un solo caso, Python es más como un hog de memoria. Sin embargo, en lo que respecta al tamaño de la fuente, Python gana a toda máquina.

Mis experiencias con Python muestran la misma tendencia definida de que Python es del orden de 10 a 100 veces más lento que C++ cuando se hace un gran número de crujidos. Hay muchas razones para esto, las principales son: a) se interpreta Python, mientras se compila C++; b) Python no tiene primitivas, todo lo que incluye los tipos integrados (int, float, etc.) son objetos; c) una lista de Python puede contener objetos de diferente tipo, por lo que cada entrada tiene que almacenar datos adicionales sobre su tipo. Todo esto dificulta gravemente tanto el tiempo de ejecución como el consumo de memoria.

Sin embargo, esto no es razón para ignorar Python. Una gran cantidad de software no requiere mucho tiempo o memoria, incluso con el factor de lentitud de 100 veces. El costo de desarrollo es donde Python gana con el estilo simple y conciso. Esta mejora en el costo de desarrollo a menudo supera el costo de recursos adicionales de CPU y memoria. Sin embargo, cuando no lo hace, gana C++.

+82

Además, las personas que hablan de que Python es lento en el cálculo serio de números no han utilizado los módulos Numpy y Scipy. Python está realmente despegando en la informática científica en estos días. Por supuesto, la velocidad proviene del uso de módulos escritos en C o bibliotecas escritas en Fortran, pero esa es la belleza de un lenguaje de scripting en mi opinión. –

+2

Me aseguro de lo que ha dicho y este es un enlace para comprobarlo: http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/ – ucefkh

+2

Referente a: * c) una lista de Python puede contener objetos de diferente tipo, por lo que cada entrada tiene que almacenar datos adicionales sobre su tipo. * La lista de Python es realmente una lista de punteros a los objetos. En python, es el valor que conoce su tipo, mientras que la variable es solo un puntero al "objeto de valor genérico" (por lo tanto, los números pares son inmutables). Entonces, las listas no almacenan los tipos de contenido, solo punteros. No obstante, tiene razón acerca de la sobrecarga de memoria: python tiene que almacenar el tipo y otro contexto para valores de cualquier tipo. – Alex

22

Mi experiencia es la misma que la de los puntos de referencia. Python puede ser lento y usa más memoria. Escribo mucho, mucho menos código y funciona la primera vez con mucha menos depuración. Como administra la memoria para mí, no tengo que hacer ninguna gestión de memoria, lo que ahorra horas de búsqueda de fugas en el núcleo.

¿Cuál es tu pregunta?

+0

Me confundieron los resultados de los puntos de referencia. Resulta que los malinterpreté. – Alex

2

Creo que esas estadísticas muestran que Python es mucho más lento y usa más memoria para esos puntos de referencia. ¿Estás seguro de que los estás leyendo correctamente?

En mi experiencia, que es principalmente escribir programas vinculados a la red y al sistema de archivos en Python, Python no es significativamente más lento de ninguna manera que importe. Para ese tipo de trabajo, sus beneficios superan sus costos.

+0

De hecho. Cuando el rendimiento es un problema, lo que python es bueno es vincular módulos externos de alto rendimiento o crear prototipos del sistema y luego permitir que los cuellos de botella (generalmente en el fondo de un bucle interno) se reescriban como un módulo C, etc. – xan

11

El tamaño de fuente no es realmente una medida sensata. Por ejemplo, la siguiente secuencia de comandos shell:

cat foobar 

es mucho más corto que sea su Python o equivalentes de C++.

+29

Y mucho más fácil mantenga que las versiones más largas de Python o C++ también. Yo sostengo que el tamaño del código fuente sí importa, y para ciertas tareas simples, las secuencias de comandos de shell son buenas. –

+1

Ese es un buen punto. –

+0

También creo que el tamaño del código fuente importa mucho, y para algunas tareas, Bash es la herramienta adecuada para el trabajo. Vea un buen ejemplo comparando un script bash simple con Python aquí: http://innolitics.com/articles/programming-languages/#what-makes-programming-languages-different (necesita desplazarse un poco hacia abajo). Creo que es un ejemplo un poco más sofisticado que 'cat footer'. – jdg

6

También: Psyco vs. C++.

Todavía es una mala comparación, ya que nadie haría las pruebas numéricas crujientes en las que los puntos de referencia tienden a centrarse en Python puro de todos modos. Una mejor sería comparar el rendimiento de las aplicaciones realistas, o C++ versus NumPy, para tener una idea de si su programa será notablemente más lento.

+1

en otras palabras - ya que las cosas de números cruzados son mucho más lentas escríbelas en C++ y llámalas desde Python :-) – igouy

97

Todos los usos más lentos (> 100x) de Python en el tiroteo son operaciones científicas que requieren un alto conteo de GFlop/s. NO deberías usar Python para esos de todos modos. La forma correcta de usar python es importar un módulo que haga esos cálculos, y luego ir a pasar una tarde relajada con su familia.Eso es la manera pitónica :)

+2

Hoy en día hay varios [compiladores de Python a C++] (https://stackoverflow.com/questions/4650243/ convert-python-program-to-cc-code), por lo que Python puede ser tan rápido como C++ en algunos casos. –

3

El problema aquí es que tiene dos idiomas diferentes que resuelven dos problemas diferentes ... es como comparar C++ con el ensamblador.

Python es para el desarrollo rápido de aplicaciones y para cuando el rendimiento es una preocupación mínima.

C++ es no para un rápido desarrollo de aplicaciones y hereda un legado de velocidad de C: para programación de bajo nivel.

2

Es el mismo problema con el lenguaje de programación administrado y fácil de usar que siempre: son lentos (y algunas veces consumen memoria).

Estos son idiomas para controlar en lugar de procesar. Si tuviera que escribir una aplicación para transformar imágenes y tuviera que usar Python también, todo el procesamiento podría escribirse en C++ y conectarse a Python a través de enlaces, mientras que la interfaz y el control del proceso serían definitivamente Python.

Cuestiones relacionadas