Python быстрее и легче C ++? [закрыто]

92

Я всегда думал, что преимущества Python - это читаемость кода и скорость разработки, но использование времени и памяти было не так хорошо, как у C ++.

Эта статистика меня очень сильно поразила.

Что ваш опыт говорит вам об использовании времени и памяти Python и C ++?

Alex
источник
18
Таким образом, Pyhton в большинстве случаев медленнее и использует больше оперативной памяти, но источник меньше. в чем именно проблема?:
nuriaion
2
Думаю, я неверно истолковал результаты.
Alex
6
Что действительно интересно, так это то, что тесты C ++ по-прежнему «лучше», чем тесты C!
gbjbaanb
9
@gbjbaanb: Меня не удивляет. В C ++ добавлено множество функций, которые позволяют создавать более быстрый код. Если вы знаете, что делаете, C ++ может быть смехотворно эффективным, даже более эффективным, чем C. (Конечно, C ++ также включает некоторые функции, снижающие производительность, но вам не обязательно их использовать). Но распространенное мнение, что «C быстрее, чем C ++», неверно. (и вопрос не имеет
большого значения
1
Ссылка мертва
Арн

Ответы:

240

Я думаю, вы неправильно читаете эту статистику. Они показывают, что Python примерно в 400 раз медленнее, чем C ++, и, за исключением единственного случая, Python больше требует памяти. Однако когда дело доходит до размера исходного кода, Python выигрывает.

Мой опыт работы с Python показывает ту же определенную тенденцию, что Python примерно в 10–100 раз медленнее, чем C ++, при серьезном вычислении чисел. Для этого есть много причин, главные из которых: a) Python интерпретируется, а C ++ компилируется; б) Python не имеет примитивов, все, включая встроенные типы (int, float и т. д.), являются объектами; c) список Python может содержать объекты разного типа, поэтому каждая запись должна хранить дополнительные данные о своем типе. Все это серьезно затрудняет как время выполнения, так и потребление памяти.

Однако это не причина игнорировать Python. Многие программы не требуют много времени или памяти даже при 100-кратном коэффициенте замедления. Стоимость разработки - это то, в чем Python выигрывает благодаря простому и лаконичному стилю. Это улучшение стоимости разработки часто превышает стоимость дополнительных ресурсов процессора и памяти. Однако если этого не происходит, то выигрывает С ++.

Мойнудин
источник
111
Кроме того, люди, которые говорят о том, что Python медлителен для серьезной обработки чисел, не использовали модули Numpy и Scipy. В наши дни Python действительно набирает обороты в научных вычислениях. Конечно, скорость достигается за счет использования модулей, написанных на C, или библиотек, написанных на Фортране, но, на мой взгляд, это прелесть языка сценариев.
Джастин Пил,
3
Я подтверждаю то, что вы сказали, и это ссылка, подтверждающая это: blog.dhananjaynene.com/2008/07/…
ucefkh
2
Что касается: c) список Python может содержать объекты разного типа, поэтому каждая запись должна хранить дополнительные данные о своем типе. Список python - это действительно список указателей на объекты. В python это значение, которое знает свой тип, тогда как переменная является только указателем на «объект общего значения» (поэтому даже числа неизменяемы). Таким образом, списки не хранят типы своего содержимого - только указатели. Вы правы насчет накладных расходов на память - python действительно должен хранить тип и другой контекст для значений любого типа.
Alex
если вы говорите о cpython ... тогда да, но pypy в большинстве случаев очень быстр (сравним с java, я думаю, 1/3 скорости java), подмножества python почти такие же быстрые, как c ++ (см. shedskin)
Quonux
1
@JustinPeel, я сомневаюсь, правда ли это. даже при широком использовании numpyи scipyбольшая pythonкодовая база, вероятно, будет содержать много кода на чистом питоне, что сделает работу медленнее, чем C++. сценарий python приближается к скорости C++сценария в зависимости от процента его Cкода 100, после чего он больше не является сценарием python. Python, конечно, набирает обороты, но не потому, что он такой быстрый, а C++потому, что его проще использовать.
dbliss
131

Все самые медленные (> 100x) использования Python в перестрелках - это научные операции, требующие большого количества GFlop / s. В любом случае вы НЕ должны использовать для этого Python. Правильный способ использования python - импортировать модуль, который выполняет эти вычисления, а затем провести расслабляющий вечер с семьей. Это питонический путь :)

Тим Лин
источник
3
В настоящее время существует несколько компиляторов Python в C ++ , поэтому в некоторых случаях Python может работать так же быстро, как C ++.
Андерсон Грин
26

Мой опыт такой же, как и в тестах. Python может быть медленным и использовать больше памяти. Я пишу намного меньше кода, и он работает с первого раза с гораздо меньшими затратами на отладку. Поскольку он управляет памятью за меня, мне не нужно управлять памятью, что позволяет сэкономить часы на поиске утечек ядра.

Каков твой вопрос?

С.Лотт
источник
Меня просто смутили результаты тестов. Оказывается, я неправильно их истолковал.
Alex
16

Размер источника - не самая разумная вещь для измерения. Например, следующий сценарий оболочки:

cat foobar

намного короче, чем его эквиваленты на Python или C ++.


источник
35
И гораздо проще поддерживать это в более длинных версиях Python или C ++. Я считаю, что размер исходного кода имеет значение, и для некоторых простых задач подходят краткие сценарии оболочки.
S.Lott
Я также считаю, что размер исходного кода имеет большое значение, и для некоторых задач Bash - подходящий инструмент. См. Хороший пример сравнения простого сценария bash и python здесь: innolitics.com/articles/programming-languages/… (вам нужно немного прокрутить вниз). Я думаю, что это немного более сложный пример, чем cat footer.
jdg 02
7

Также: Psyco против C ++ .

Это по-прежнему плохое сравнение, поскольку никто не стал бы проводить тесты, на которых все равно приходится делать упор на чистом Python. Лучше было бы сравнить производительность реалистичных приложений или C ++ с NumPy, чтобы понять, будет ли ваша программа заметно медленнее.

миллимеш
источник
2
другими словами - поскольку числовой хрустящий материал намного медленнее, напишите его на C ++ и назовите его из Python :-)
igouy
1
Если вы собираетесь использовать библиотеку на Python, чтобы сделать это быстрее, то вы можете также использовать библиотеку обработки чисел на С ++. Таким образом вы сохраните гибкость C ++ без необходимости писать кучу кода :)
SuperSim135
Это бессмысленный некро божественного уровня . OP буквально заявляет, что предпочитает Python из-за удобочитаемости и удобства, зачем кому-то напрямую использовать язык, который им меньше нравится, если они могут получить большую часть преимуществ в производительности, если авторы библиотеки позаботятся об этом за него? Смысл использования библиотек заключается не в том, чтобы выполнять ту работу, которую они делают лучше сами, а в том, что библиотека является нативной привязкой, это деталь оптимизации / реализации.
millimoose
6

Проблема в том, что у вас есть два разных языка, которые решают две разные проблемы ... это все равно, что сравнивать C ++ с ассемблером.

Python предназначен для быстрой разработки приложений и для тех случаев, когда производительность является минимальной проблемой.

C ++ не предназначен для быстрой разработки приложений и унаследовал скорость от C - для программирования низкого уровня.

Джерико
источник
3

Та же проблема с управляемым и простым в использовании языком программирования, как и всегда - они медленные (а иногда и пожирают память).

Эти языки предназначены для управления, а не для обработки. Если бы мне пришлось написать приложение для преобразования изображений и использовать Python, вся обработка могла бы быть написана на C ++ и подключена к Python через привязки, в то время как интерфейс и управление процессом были бы определенно Python.

Мигол
источник
Эти библиотеки уже написаны для Python, C или Java, так почему бы не использовать динамический язык, чтобы склеить их вместе?
aoeu256
2

Я думаю, что эта статистика показывает, что Python намного медленнее и использует больше памяти для этих тестов - вы уверены, что читаете их правильно?

По моему опыту, который в основном связан с написанием программ, привязанных к сети и файловой системе, на Python, Python не намного медленнее в любом случае. Для такого рода работы преимущества перевешивают затраты.

РичиХиндл
источник
На самом деле. Когда производительность является проблемой, то , что питон хорошо является обязательным вместе высокопроизводительными внешними модули или прототипирования системы , а затем позволяя узкие (обычно глубоко во внутреннем цикле) , чтобы быть переписаны в виде С модулем и т.д.
Xan