Ist Python schneller und leichter als C ++? [geschlossen]
89
Ich habe immer gedacht, dass Pythons Vorteile die Lesbarkeit des Codes und die Entwicklungsgeschwindigkeit sind, aber Zeit und Speichernutzung waren nicht so gut wie die von C ++.
Daher ist Pyhton in den meisten Fällen langsamer und benötigt mehr RAM, aber die Quelle ist kleiner. Was genau ist das Problem?
Nuriaion
2
Ich glaube, ich habe die Ergebnisse falsch interpretiert.
Alex
6
Was wirklich interessant ist, ist, dass die C ++ - Tests immer noch "besser" sind als die C-Tests!
Gbjbaanb
9
@gbjbaanb: Wundert mich nicht. C ++ hat viele Funktionen hinzugefügt, die potenziell schnelleren Code ermöglichen. Wenn Sie wissen, was Sie tun, kann C ++ lächerlich effizienter sein als C. (Natürlich enthält C ++ auch einige Funktionen, die die Leistung beeinträchtigen, aber Sie müssen sie nicht verwenden). Aber die allgemeine Überzeugung, dass "C schneller als C ++ ist", ist falsch. (und die Frage ist überhaupt nicht sehr aussagekräftig)
Jalf
1
Der Link ist tot
Arn
Antworten:
232
Ich denke, Sie lesen diese Statistiken falsch. Sie zeigen, dass Python bis zu 400-mal langsamer als C ++ ist und mit Ausnahme eines Einzelfalls Python eher ein Speicherfresser ist. Wenn es um die Quellgröße geht, gewinnt Python auf Anhieb.
Meine Erfahrungen mit Python zeigen den gleichen eindeutigen Trend, dass Python in der Größenordnung zwischen 10 und 100 Mal langsamer ist als C ++, wenn es um ernsthafte Zahlenverarbeitung geht. Dafür gibt es viele Gründe, die wichtigsten sind: a) Python wird interpretiert, während C ++ kompiliert wird; b) Python hat keine Grundelemente, alles einschließlich der eingebauten Typen (int, float usw.) sind Objekte; c) Eine Python-Liste kann Objekte unterschiedlichen Typs enthalten, sodass jeder Eintrag zusätzliche Daten zu seinem Typ speichern muss. All dies behindert die Laufzeit und den Speicherverbrauch erheblich.
Dies ist jedoch kein Grund, Python zu ignorieren. Viele Software benötigt selbst mit dem 100-Zeit-Langsamkeitsfaktor nicht viel Zeit oder Speicher. Bei den Entwicklungskosten gewinnt Python mit dem einfachen und prägnanten Stil. Diese Verbesserung der Entwicklungskosten überwiegt häufig die Kosten für zusätzliche CPU- und Speicherressourcen. Wenn dies jedoch nicht der Fall ist, gewinnt C ++.
Außerdem haben Leute, die davon sprechen, dass Python für ernsthafte Zahlenverarbeitung langsam ist, die Module Numpy und Scipy nicht verwendet. Python hebt heutzutage wirklich im wissenschaftlichen Rechnen ab. Die Geschwindigkeit ergibt sich natürlich aus der Verwendung von Modulen in C oder von Bibliotheken in Fortran, aber das ist meiner Meinung nach das Schöne an einer Skriptsprache.
Zu: c) Eine Python-Liste kann Objekte unterschiedlichen Typs enthalten, sodass jeder Eintrag zusätzliche Daten zu seinem Typ speichern muss. Die Python-Liste ist wirklich eine Liste von Zeigern auf Objekte. In Python ist es der Wert, der seinen Typ kennt, während die Variable nur ein Zeiger auf das "generische Wertobjekt" ist (daher sind gerade Zahlen unveränderlich). In Listen werden also nicht die Inhaltstypen gespeichert, sondern nur Zeiger. Sie haben jedoch Recht mit dem Speicheraufwand - Python muss den Typ und den anderen Kontext für Werte eines beliebigen Typs speichern.
Alex
Wenn Sie über Python sprechen ... dann ja, aber Pypy ist in den meisten Fällen sehr schnell (vergleichbar mit Java, 1/3 Geschwindigkeit von Java, denke ich), sind Teilmengen von Python fast so schnell wie C ++ (siehe Shedskin)
Quonux
1
@ JustinPeel Ich frage, ob das stimmt. auch bei umfangreichem Gebrauch machen numpyund scipyeine große pythonCode - Basis ist wahrscheinlich eine Menge Code in reinem Python haben, die Dinge langsamer als C++. Ein Python-Skript nähert sich der Geschwindigkeit eines C++Skripts, wenn der Prozentsatz seines CCodes erreicht wird. Ab 100diesem Zeitpunkt ist es kein Python-Skript mehr. Python hebt sicher ab, aber nicht, weil es so schnell ist wie C++- weil es einfacher zu bedienen ist.
Dbliss
132
Alle langsamsten (> 100x) Verwendungen von Python im Shootout sind wissenschaftliche Operationen, die eine hohe GFlop / s-Anzahl erfordern. Sie sollten Python sowieso NICHT für diese verwenden. Die richtige Art, Python zu verwenden, besteht darin, ein Modul zu importieren, das diese Berechnungen durchführt, und dann einen entspannten Nachmittag mit Ihrer Familie zu verbringen. Das ist der pythonische Weg :)
Heutzutage gibt es mehrere Python-zu-C ++ - Compiler , sodass Python in einigen Fällen so schnell wie C ++ sein kann.
Anderson Green
26
Meine Erfahrung ist die gleiche wie die Benchmarks. Python kann langsam sein und benötigt mehr Speicher. Ich schreibe viel, viel weniger Code und es funktioniert beim ersten Mal mit viel weniger Debugging. Da es den Speicher für mich verwaltet, muss ich keine Speicherverwaltung durchführen, wodurch Stunden gespart werden, um Kernlecks aufzuspüren.
Und viel einfacher zu pflegen als die längeren Python- oder C ++ - Versionen. Ich behaupte, dass die Größe des Quellcodes eine Rolle spielt, und für bestimmte einfache Aufgaben sind knappe Shell-Skripte gut.
S.Lott
Ich glaube auch, dass die Größe des Quellcodes sehr wichtig ist, und für einige Aufgaben ist Bash das richtige Werkzeug für den Job. Ein schönes Beispiel für den Vergleich eines einfachen Bash-Skripts mit Python finden Sie hier: innolitics.com/articles/programming-languages/… (Sie müssen ein wenig nach unten scrollen). Ich denke, es ist ein etwas raffinierteres Beispiel als cat footer.
Es ist immer noch ein schlechter Vergleich, da niemand die nummerierten Dinge tun würde, auf die sich Benchmarks in reinem Python sowieso konzentrieren. Besser wäre es, die Leistung realistischer Anwendungen oder C ++ mit NumPy zu vergleichen, um eine Vorstellung davon zu bekommen, ob Ihr Programm merklich langsamer sein wird.
mit anderen Worten - da numbercrunchy Zeug so viel langsamer ist, schreibe es in C ++ und rufe es von Python auf :-)
igouy
1
Wenn Sie eine Bibliothek in Python verwenden möchten, um sie schneller zu machen, können Sie auch eine Bibliothek zum Knacken von Zahlen in C ++ verwenden. Auf diese Weise behalten Sie die Flexibilität von c ++ bei, ohne eine Menge Code schreiben zu müssen :)
SuperSim135
Das ist ein sinnloser Nekro auf göttlicher Ebene . OP gibt buchstäblich an, Python aus Gründen der Lesbarkeit und Bequemlichkeit zu bevorzugen. Warum sollte jemand direkt eine Sprache verwenden, die er weniger mag, wenn er die meisten Leistungsvorteile erzielen kann, indem Bibliotheksautoren sich um diese kümmern? Der Sinn der Verwendung von Bibliotheken besteht darin, nicht die Art von Arbeit zu erledigen, die sie selbst besser erledigen. Eine Bibliothek ist zufällig eine native Bindung. Dies ist ein Optimierungs- / Implementierungsdetail.
Millimoose
5
Das Problem hier ist, dass Sie zwei verschiedene Sprachen haben, die zwei verschiedene Probleme lösen ... es ist wie ein Vergleich von C ++ mit Assembler.
Python ist für die schnelle Anwendungsentwicklung und für den Fall gedacht, dass die Leistung nur ein minimales Problem darstellt.
C ++ ist nicht für die schnelle Anwendungsentwicklung gedacht und erbt ein Erbe der Geschwindigkeit von C - für die Programmierung auf niedriger Ebene.
Es ist das gleiche Problem mit verwalteten und einfach zu verwendenden Programmiersprachen wie immer - sie sind langsam (und manchmal speicherfressend).
Dies sind Sprachen, die eher gesteuert als verarbeitet werden müssen. Wenn ich eine Anwendung schreiben müsste, um Bilder zu transformieren, und auch Python verwenden müsste, könnte die gesamte Verarbeitung in C ++ geschrieben und über Bindungen mit Python verbunden werden, während die Schnittstellen- und Prozesssteuerung definitiv Python wäre.
Diese Bibliotheken sind bereits für Python, C oder Java geschrieben. Warum also nicht eine dynamische Sprache verwenden, um sie zusammenzukleben?
aoeu256
2
Ich denke, diese Statistiken zeigen, dass Python viel langsamer ist und mehr Speicher für diese Benchmarks verwendet. Sind Sie sicher, dass Sie sie richtig lesen?
Nach meiner Erfahrung, die hauptsächlich mit dem Schreiben von netzwerk- und dateisystemgebundenen Programmen in Python zusammenhängt, ist Python in keiner wichtigen Hinsicht wesentlich langsamer. Für diese Art von Arbeit überwiegen die Vorteile die Kosten.
Tatsächlich. Wenn Leistung ein Problem ist, kann Python externe Hochleistungsmodule zusammenbinden oder das System prototypisieren und dann die Engpässe (normalerweise tief in einer inneren Schleife) als C-Modul usw. umschreiben lassen
Antworten:
Ich denke, Sie lesen diese Statistiken falsch. Sie zeigen, dass Python bis zu 400-mal langsamer als C ++ ist und mit Ausnahme eines Einzelfalls Python eher ein Speicherfresser ist. Wenn es um die Quellgröße geht, gewinnt Python auf Anhieb.
Meine Erfahrungen mit Python zeigen den gleichen eindeutigen Trend, dass Python in der Größenordnung zwischen 10 und 100 Mal langsamer ist als C ++, wenn es um ernsthafte Zahlenverarbeitung geht. Dafür gibt es viele Gründe, die wichtigsten sind: a) Python wird interpretiert, während C ++ kompiliert wird; b) Python hat keine Grundelemente, alles einschließlich der eingebauten Typen (int, float usw.) sind Objekte; c) Eine Python-Liste kann Objekte unterschiedlichen Typs enthalten, sodass jeder Eintrag zusätzliche Daten zu seinem Typ speichern muss. All dies behindert die Laufzeit und den Speicherverbrauch erheblich.
Dies ist jedoch kein Grund, Python zu ignorieren. Viele Software benötigt selbst mit dem 100-Zeit-Langsamkeitsfaktor nicht viel Zeit oder Speicher. Bei den Entwicklungskosten gewinnt Python mit dem einfachen und prägnanten Stil. Diese Verbesserung der Entwicklungskosten überwiegt häufig die Kosten für zusätzliche CPU- und Speicherressourcen. Wenn dies jedoch nicht der Fall ist, gewinnt C ++.
quelle
numpy
undscipy
eine großepython
Code - Basis ist wahrscheinlich eine Menge Code in reinem Python haben, die Dinge langsamer alsC++
. Ein Python-Skript nähert sich der Geschwindigkeit einesC++
Skripts, wenn der Prozentsatz seinesC
Codes erreicht wird. Ab100
diesem Zeitpunkt ist es kein Python-Skript mehr. Python hebt sicher ab, aber nicht, weil es so schnell ist wieC++
- weil es einfacher zu bedienen ist.Alle langsamsten (> 100x) Verwendungen von Python im Shootout sind wissenschaftliche Operationen, die eine hohe GFlop / s-Anzahl erfordern. Sie sollten Python sowieso NICHT für diese verwenden. Die richtige Art, Python zu verwenden, besteht darin, ein Modul zu importieren, das diese Berechnungen durchführt, und dann einen entspannten Nachmittag mit Ihrer Familie zu verbringen. Das ist der pythonische Weg :)
quelle
Meine Erfahrung ist die gleiche wie die Benchmarks. Python kann langsam sein und benötigt mehr Speicher. Ich schreibe viel, viel weniger Code und es funktioniert beim ersten Mal mit viel weniger Debugging. Da es den Speicher für mich verwaltet, muss ich keine Speicherverwaltung durchführen, wodurch Stunden gespart werden, um Kernlecks aufzuspüren.
Was ist deine Frage?
quelle
Die Quellgröße ist nicht wirklich sinnvoll zu messen. Zum Beispiel das folgende Shell-Skript:
ist viel kürzer als die Python- oder C ++ - Entsprechungen.
quelle
cat footer
.Auch: Psyco vs. C ++ .
Es ist immer noch ein schlechter Vergleich, da niemand die nummerierten Dinge tun würde, auf die sich Benchmarks in reinem Python sowieso konzentrieren. Besser wäre es, die Leistung realistischer Anwendungen oder C ++ mit NumPy zu vergleichen, um eine Vorstellung davon zu bekommen, ob Ihr Programm merklich langsamer sein wird.
quelle
Das Problem hier ist, dass Sie zwei verschiedene Sprachen haben, die zwei verschiedene Probleme lösen ... es ist wie ein Vergleich von C ++ mit Assembler.
Python ist für die schnelle Anwendungsentwicklung und für den Fall gedacht, dass die Leistung nur ein minimales Problem darstellt.
C ++ ist nicht für die schnelle Anwendungsentwicklung gedacht und erbt ein Erbe der Geschwindigkeit von C - für die Programmierung auf niedriger Ebene.
quelle
Es ist das gleiche Problem mit verwalteten und einfach zu verwendenden Programmiersprachen wie immer - sie sind langsam (und manchmal speicherfressend).
Dies sind Sprachen, die eher gesteuert als verarbeitet werden müssen. Wenn ich eine Anwendung schreiben müsste, um Bilder zu transformieren, und auch Python verwenden müsste, könnte die gesamte Verarbeitung in C ++ geschrieben und über Bindungen mit Python verbunden werden, während die Schnittstellen- und Prozesssteuerung definitiv Python wäre.
quelle
Ich denke, diese Statistiken zeigen, dass Python viel langsamer ist und mehr Speicher für diese Benchmarks verwendet. Sind Sie sicher, dass Sie sie richtig lesen?
Nach meiner Erfahrung, die hauptsächlich mit dem Schreiben von netzwerk- und dateisystemgebundenen Programmen in Python zusammenhängt, ist Python in keiner wichtigen Hinsicht wesentlich langsamer. Für diese Art von Arbeit überwiegen die Vorteile die Kosten.
quelle