Таким образом, 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 выигрывает благодаря простому и лаконичному стилю. Это улучшение стоимости разработки часто превышает стоимость дополнительных ресурсов процессора и памяти. Однако если этого не происходит, то выигрывает С ++.
Кроме того, люди, которые говорят о том, что Python медлителен для серьезной обработки чисел, не использовали модули Numpy и Scipy. В наши дни Python действительно набирает обороты в научных вычислениях. Конечно, скорость достигается за счет использования модулей, написанных на C, или библиотек, написанных на Фортране, но, на мой взгляд, это прелесть языка сценариев.
Что касается: 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 - импортировать модуль, который выполняет эти вычисления, а затем провести расслабляющий вечер с семьей. Это питонический путь :)
В настоящее время существует несколько компиляторов Python в C ++ , поэтому в некоторых случаях Python может работать так же быстро, как C ++.
Андерсон Грин
26
Мой опыт такой же, как и в тестах. Python может быть медленным и использовать больше памяти. Я пишу намного меньше кода, и он работает с первого раза с гораздо меньшими затратами на отладку. Поскольку он управляет памятью за меня, мне не нужно управлять памятью, что позволяет сэкономить часы на поиске утечек ядра.
И гораздо проще поддерживать это в более длинных версиях Python или C ++. Я считаю, что размер исходного кода имеет значение, и для некоторых простых задач подходят краткие сценарии оболочки.
S.Lott
Я также считаю, что размер исходного кода имеет большое значение, и для некоторых задач Bash - подходящий инструмент. См. Хороший пример сравнения простого сценария bash и python здесь: innolitics.com/articles/programming-languages/… (вам нужно немного прокрутить вниз). Я думаю, что это немного более сложный пример, чем cat footer.
Это по-прежнему плохое сравнение, поскольку никто не стал бы проводить тесты, на которых все равно приходится делать упор на чистом Python. Лучше было бы сравнить производительность реалистичных приложений или C ++ с NumPy, чтобы понять, будет ли ваша программа заметно медленнее.
другими словами - поскольку числовой хрустящий материал намного медленнее, напишите его на C ++ и назовите его из Python :-)
igouy
1
Если вы собираетесь использовать библиотеку на Python, чтобы сделать это быстрее, то вы можете также использовать библиотеку обработки чисел на С ++. Таким образом вы сохраните гибкость C ++ без необходимости писать кучу кода :)
SuperSim135
Это бессмысленный некро божественного уровня . OP буквально заявляет, что предпочитает Python из-за удобочитаемости и удобства, зачем кому-то напрямую использовать язык, который им меньше нравится, если они могут получить большую часть преимуществ в производительности, если авторы библиотеки позаботятся об этом за него? Смысл использования библиотек заключается не в том, чтобы выполнять ту работу, которую они делают лучше сами, а в том, что библиотека является нативной привязкой, это деталь оптимизации / реализации.
millimoose
6
Проблема в том, что у вас есть два разных языка, которые решают две разные проблемы ... это все равно, что сравнивать C ++ с ассемблером.
Python предназначен для быстрой разработки приложений и для тех случаев, когда производительность является минимальной проблемой.
C ++ не предназначен для быстрой разработки приложений и унаследовал скорость от C - для программирования низкого уровня.
Та же проблема с управляемым и простым в использовании языком программирования, как и всегда - они медленные (а иногда и пожирают память).
Эти языки предназначены для управления, а не для обработки. Если бы мне пришлось написать приложение для преобразования изображений и использовать Python, вся обработка могла бы быть написана на C ++ и подключена к Python через привязки, в то время как интерфейс и управление процессом были бы определенно Python.
Эти библиотеки уже написаны для Python, C или Java, так почему бы не использовать динамический язык, чтобы склеить их вместе?
aoeu256
2
Я думаю, что эта статистика показывает, что Python намного медленнее и использует больше памяти для этих тестов - вы уверены, что читаете их правильно?
По моему опыту, который в основном связан с написанием программ, привязанных к сети и файловой системе, на Python, Python не намного медленнее в любом случае. Для такого рода работы преимущества перевешивают затраты.
На самом деле. Когда производительность является проблемой, то , что питон хорошо является обязательным вместе высокопроизводительными внешними модули или прототипирования системы , а затем позволяя узкие (обычно глубоко во внутреннем цикле) , чтобы быть переписаны в виде С модулем и т.д.
Ответы:
Я думаю, вы неправильно читаете эту статистику. Они показывают, что Python примерно в 400 раз медленнее, чем C ++, и, за исключением единственного случая, Python больше требует памяти. Однако когда дело доходит до размера исходного кода, Python выигрывает.
Мой опыт работы с Python показывает ту же определенную тенденцию, что Python примерно в 10–100 раз медленнее, чем C ++, при серьезном вычислении чисел. Для этого есть много причин, главные из которых: a) Python интерпретируется, а C ++ компилируется; б) Python не имеет примитивов, все, включая встроенные типы (int, float и т. д.), являются объектами; c) список Python может содержать объекты разного типа, поэтому каждая запись должна хранить дополнительные данные о своем типе. Все это серьезно затрудняет как время выполнения, так и потребление памяти.
Однако это не причина игнорировать Python. Многие программы не требуют много времени или памяти даже при 100-кратном коэффициенте замедления. Стоимость разработки - это то, в чем Python выигрывает благодаря простому и лаконичному стилю. Это улучшение стоимости разработки часто превышает стоимость дополнительных ресурсов процессора и памяти. Однако если этого не происходит, то выигрывает С ++.
источник
numpy
иscipy
большаяpython
кодовая база, вероятно, будет содержать много кода на чистом питоне, что сделает работу медленнее, чемC++
. сценарий python приближается к скоростиC++
сценария в зависимости от процента егоC
кода100
, после чего он больше не является сценарием python. Python, конечно, набирает обороты, но не потому, что он такой быстрый, аC++
потому, что его проще использовать.Все самые медленные (> 100x) использования Python в перестрелках - это научные операции, требующие большого количества GFlop / s. В любом случае вы НЕ должны использовать для этого Python. Правильный способ использования python - импортировать модуль, который выполняет эти вычисления, а затем провести расслабляющий вечер с семьей. Это питонический путь :)
источник
Мой опыт такой же, как и в тестах. Python может быть медленным и использовать больше памяти. Я пишу намного меньше кода, и он работает с первого раза с гораздо меньшими затратами на отладку. Поскольку он управляет памятью за меня, мне не нужно управлять памятью, что позволяет сэкономить часы на поиске утечек ядра.
Каков твой вопрос?
источник
Размер источника - не самая разумная вещь для измерения. Например, следующий сценарий оболочки:
cat foobar
намного короче, чем его эквиваленты на Python или C ++.
источник
cat footer
.Также: Psyco против C ++ .
Это по-прежнему плохое сравнение, поскольку никто не стал бы проводить тесты, на которых все равно приходится делать упор на чистом Python. Лучше было бы сравнить производительность реалистичных приложений или C ++ с NumPy, чтобы понять, будет ли ваша программа заметно медленнее.
источник
Проблема в том, что у вас есть два разных языка, которые решают две разные проблемы ... это все равно, что сравнивать C ++ с ассемблером.
Python предназначен для быстрой разработки приложений и для тех случаев, когда производительность является минимальной проблемой.
C ++ не предназначен для быстрой разработки приложений и унаследовал скорость от C - для программирования низкого уровня.
источник
Та же проблема с управляемым и простым в использовании языком программирования, как и всегда - они медленные (а иногда и пожирают память).
Эти языки предназначены для управления, а не для обработки. Если бы мне пришлось написать приложение для преобразования изображений и использовать Python, вся обработка могла бы быть написана на C ++ и подключена к Python через привязки, в то время как интерфейс и управление процессом были бы определенно Python.
источник
Я думаю, что эта статистика показывает, что Python намного медленнее и использует больше памяти для этих тестов - вы уверены, что читаете их правильно?
По моему опыту, который в основном связан с написанием программ, привязанных к сети и файловой системе, на Python, Python не намного медленнее в любом случае. Для такого рода работы преимущества перевешивают затраты.
источник