Python est-il plus rapide et plus léger que C ++? [fermé]


90

J'ai toujours pensé que les avantages de Python étaient la lisibilité du code et la vitesse de développement, mais le temps et l'utilisation de la mémoire n'étaient pas aussi bons que ceux de C ++.

Ces statistiques m'ont vraiment frappé.

Que vous apprend votre expérience sur l'utilisation du temps et de la mémoire Python vs C ++?


18
Ainsi, Pyhton est pour la plupart de ces cas plus lent et utilise plus de RAM, mais la source est plus petite. Quel est le problème exactement?
nuriaion

2
Je suppose que j'ai mal interprété les résultats.
Alex

6
Ce qui est vraiment intéressant, c'est que les tests C ++ sont toujours «meilleurs» que ceux en C!
gbjbaanb

9
@gbjbaanb: Cela ne me surprend pas. C ++ a ajouté de nombreuses fonctionnalités qui permettent un code potentiellement plus rapide. Si vous savez ce que vous faites, C ++ peut être ridiculement efficace, plus que C. (Bien sûr, C ++ inclut également certaines fonctionnalités qui nuisent aux performances, mais vous n'êtes pas obligé de les utiliser). Mais la croyance commune selon laquelle "C est plus rapide que C ++" est fausse. (et la question n'est pas très significative en premier lieu)
jalf

1
Le lien est mort
Arn

Réponses:


237

Je pense que vous ne lisez pas correctement ces statistiques. Ils montrent que Python est jusqu'à environ 400 fois plus lent que C ++ et à l'exception d'un seul cas, Python est plus un bourreau de mémoire. En ce qui concerne la taille de la source, Python gagne à fond.

Mes expériences avec Python montrent la même tendance définie que Python est de l'ordre de 10 à 100 fois plus lent que C ++ lors de toute analyse sérieuse des nombres. Il y a plusieurs raisons à cela, les principales étant: a) Python est interprété, tandis que C ++ est compilé; b) Python n'a pas de primitives, tout y compris les types intégrés (int, float, etc.) sont des objets; c) une liste Python peut contenir des objets de type différent, donc chaque entrée doit stocker des données supplémentaires sur son type. Tout cela nuit gravement à la fois à l'exécution et à la consommation de mémoire.

Ce n'est cependant pas une raison pour ignorer Python. Beaucoup de logiciels ne nécessitent pas beaucoup de temps ou de mémoire, même avec le facteur de lenteur 100 fois. Le coût de développement est l'endroit où Python gagne avec le style simple et concis. Cette amélioration du coût de développement l'emporte souvent sur le coût des ressources CPU et mémoire supplémentaires. Quand ce n'est pas le cas, le C ++ l'emporte.


108
De plus, les gens qui parlent de Python lent pour le calcul sérieux des nombres n'ont pas utilisé les modules Numpy et Scipy. Python prend vraiment son envol dans le calcul scientifique de nos jours. Bien sûr, la vitesse vient de l'utilisation de modules écrits en C ou de bibliothèques écrites en Fortran, mais c'est à mon avis la beauté d'un langage de script.
Justin Peel

3
J'assure ce que vous avez dit et voici un lien pour le prouver: blog.dhananjaynene.com/2008/07/…
ucefkh

2
Concernant: c) une liste Python peut contenir des objets de type différent, donc chaque entrée doit stocker des données supplémentaires sur son type. La liste python est en réalité une liste de pointeurs vers des objets. En python, c'est la valeur qui connaît son type, tandis que la variable n'est qu'un pointeur vers "l'objet de valeur générique" (donc les nombres pairs sont immuables). Les listes ne stockent donc pas les types de son contenu - juste des pointeurs. Vous avez raison au sujet de la surcharge de mémoire cependant - python doit stocker le type et autre contexte pour les valeurs de tout type.
Alex

si vous parlez de cpython ... alors oui, mais pypy est dans la plupart des cas très rapide (comparable à java, 1/3 de la vitesse de java je suppose), les sous-ensembles de python sont presque aussi rapides que c ++ (voir shedskin)
Quonux

1
@JustinPeel je me demande si c'est vrai. même lors d'une utilisation intensive de numpyet scipy, une grande pythonbase de code est susceptible d'avoir beaucoup de code en python pur, ce qui rend les choses plus lentes que C++. un script python s'approche de la vitesse d'un C++script en fonction du pourcentage de son Ccode 100, auquel point il ne s'agit plus d'un script python. python décolle, bien sûr, mais pas parce qu'il est aussi rapide que C++- parce qu'il est plus facile à utiliser.
dbliss

132

Toutes les utilisations les plus lentes (> 100x) de Python lors de la fusillade sont des opérations scientifiques qui nécessitent un nombre élevé de GFlop / s. Vous ne devriez PAS utiliser de python pour ceux-là de toute façon. La bonne façon d'utiliser python est d'importer un module qui effectue ces calculs, puis de passer un après-midi de détente avec votre famille. C'est la voie pythonique :)


3
De nos jours, il existe plusieurs compilateurs Python vers C ++ , donc Python peut être aussi rapide que C ++ dans certains cas.
Anderson Green

26

Mon expérience est la même que les benchmarks. Python peut être lent et utilise plus de mémoire. J'écris beaucoup, beaucoup moins de code et cela fonctionne la première fois avec beaucoup moins de débogage. Puisqu'il gère la mémoire pour moi, je n'ai pas à faire de gestion de la mémoire, ce qui me permet d'économiser des heures à traquer les fuites de cœur.

Quelle est votre question?


J'étais simplement confus par les résultats des benchmarks. Il s'avère que je les ai mal interprétés.
Alex

16

La taille de la source n'est pas vraiment une chose sensée à mesurer. Par exemple, le script shell suivant:

cat foobar

est beaucoup plus court que ses équivalents Python ou C ++.


35
Et beaucoup plus facile à maintenir que les versions plus longues de Python ou C ++. Je soutiens que la taille du code source est importante, et pour certaines tâches simples, les scripts shell concis sont bons.
S.Lott

Je pense également que la taille du code source compte beaucoup, et pour certaines tâches, Bash est le bon outil pour le travail. Voir un bel exemple comparant un simple script bash à python ici: innolitics.com/articles/programming-languages / ... (vous devez faire défiler un peu vers le bas). Je pense que c'est un exemple légèrement plus sophistiqué que cat footer.
jdg

7

Aussi: Psyco vs C ++ .

C'est toujours une mauvaise comparaison, car personne ne ferait les choses sur lesquelles les benchmarks ont tendance à se concentrer en Python pur de toute façon. Un meilleur serait de comparer les performances d'applications réalistes, ou C ++ par rapport à NumPy, pour avoir une idée si votre programme sera sensiblement plus lent.


2
en d'autres termes - puisque les trucs croquants sont tellement plus lents, écrivez-le en C ++ et appelez-le depuis Python :-)
igouy

1
Si vous allez utiliser une bibliothèque en python pour le rendre plus rapide, vous pouvez aussi bien utiliser une bibliothèque de calcul des nombres en c ++. De cette façon, vous gardez la flexibilité du c ++ sans avoir à écrire un tas de code :)
SuperSim135

C'est un nécro inutile de niveau divin. OP déclare littéralement préférer Python pour la lisibilité et la commodité, pourquoi quelqu'un utiliserait-il directement un langage qu'il aime moins, alors qu'il peut obtenir la plupart des avantages en termes de performances en demandant aux auteurs de bibliothèques de s'en occuper pour lui? Le but d'utiliser des bibliothèques n'est pas d'avoir à faire le genre de travail qu'elles font mieux vous-même, qu'une bibliothèque se trouve être une liaison native est un détail d'optimisation / implémentation.
millimoose

6

Le problème ici est que vous avez deux langages différents qui résolvent deux problèmes différents ... c'est comme comparer C ++ avec assembleur.

Python est destiné au développement rapide d'applications et lorsque les performances sont une préoccupation minimale.

Le C ++ n'est pas destiné au développement rapide d'applications et hérite d'un héritage de vitesse du C - pour la programmation de bas niveau.


3

C'est le même problème avec le langage de programmation géré et facile à utiliser comme toujours - ils sont lents (et parfois gourmands en mémoire).

Ce sont des langages pour contrôler plutôt que traiter. Si je devais écrire une application pour transformer des images et que je devais également utiliser Python, tout le traitement pourrait être écrit en C ++ et connecté à Python via des liaisons, tandis que le contrôle de l'interface et du processus serait définitivement Python.


Ces bibliothèques sont déjà écrites pour Python ou C ou Java, alors pourquoi ne pas utiliser un langage dynamique pour les coller ensemble?
aoeu256 du

2

Je pense que ces statistiques montrent que Python est beaucoup plus lent et utilise plus de mémoire pour ces benchmarks - êtes-vous sûr de les lire dans le bon sens?

D'après mon expérience, qui concerne principalement l'écriture de programmes liés au réseau et au système de fichiers en Python, Python n'est pas beaucoup plus lent que ce qui compte. Pour ce genre de travail, ses avantages l'emportent sur ses coûts.


En effet. Lorsque les performances sont un problème, ce que python est bon est de relier des modules externes haute performance, ou de prototyper le système, puis de permettre aux goulots d'étranglement (généralement profondément dans une boucle interne) d'être réécrits en module C, etc.
xan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.