O Python é mais rápido e mais leve que o C ++? [fechadas]
89
Sempre pensei que as vantagens do Python são a legibilidade do código e a velocidade de desenvolvimento, mas o tempo e o uso de memória não eram tão bons quanto os do C ++.
Portanto, o Pyhton é, na maioria desses casos, mais lento e usa mais RAM, mas a fonte é menor. Qual é exatamente o problema?
nuriaion
2
Acho que interpretei mal os resultados.
Alex
6
O que é realmente interessante é que os testes C ++ ainda são 'melhores' que os C!
gbjbaanb
9
@gbjbaanb: Não me surpreende. C ++ adicionou muitos recursos que permitem um código potencialmente mais rápido. Se você sabe o que está fazendo, C ++ pode ser ridiculamente eficiente, mais do que C. (Claro, C ++ também inclui alguns recursos que prejudicam o desempenho, mas você não precisa usá-los). Mas a crença comum de que "C é mais rápido que C ++" está errada. (e a pergunta não faz muito sentido em primeiro lugar)
jalf
1
O link está morto
Arn
Respostas:
235
Acho que você está lendo essas estatísticas incorretamente. Eles mostram que o Python é cerca de 400 vezes mais lento que o C ++ e, com exceção de um único caso, o Python consome mais memória. No entanto, quando se trata do tamanho do código-fonte, o Python ganha na linha.
Minhas experiências com Python mostram a mesma tendência definitiva de que Python é da ordem de 10 a 100 vezes mais lento que C ++ ao fazer qualquer processamento de números sério. As razões são muitas, sendo as principais: a) Python é interpretado, enquanto C ++ é compilado; b) Python não tem primitivos, tudo incluindo os tipos embutidos (int, float, etc.) são objetos; c) uma lista Python pode conter objetos de tipos diferentes, então cada entrada deve armazenar dados adicionais sobre seu tipo. Tudo isso prejudica gravemente o tempo de execução e o consumo de memória.
No entanto, isso não é motivo para ignorar o Python. Muitos softwares não requerem muito tempo ou memória, mesmo com o fator de lentidão de 100 vezes. O custo de desenvolvimento é onde o Python ganha com o estilo simples e conciso. Essa melhoria no custo de desenvolvimento geralmente supera o custo de recursos adicionais de CPU e memória. Quando isso não acontece, no entanto, o C ++ vence.
Além disso, as pessoas que falam que o Python é lento para cálculos graves não usaram os módulos Numpy e Scipy. Python está realmente decolando na computação científica atualmente. Claro, a velocidade vem do uso de módulos escritos em C ou bibliotecas escritas em Fortran, mas essa é a beleza de uma linguagem de script, na minha opinião.
Com relação a: c) uma lista Python pode conter objetos de diferentes tipos, então cada entrada deve armazenar dados adicionais sobre seu tipo. A lista python é na verdade uma lista de ponteiros para objetos. Em python, é o valor que conhece seu tipo, enquanto a variável é apenas um ponteiro para o "objeto de valor genérico" (portanto, os números pares são imutáveis). Portanto, as listas não armazenam os tipos de seu conteúdo - apenas ponteiros. Você está certo sobre a sobrecarga de memória - python tem que armazenar o tipo e outro contexto para valores de qualquer tipo.
Alex
se você falar sobre cpython ... então sim, mas pypy é na maioria dos casos muito rápido (comparável com java, 1/3 velocidade de java, eu acho), subconjuntos de python são quase tão rápidos quanto c ++ (veja shedskin)
Quonux
1
@JustinPeel eu questiono se isso é verdade. mesmo ao fazer uso extensivo de numpye scipy, uma grande pythonbase de código provavelmente terá muito código em Python puro, tornando as coisas mais lentas do que C++. um script python se aproxima da velocidade de um C++script conforme a porcentagem de seu Ccódigo chega 100, ponto em que não é mais um script python. O python está decolando, com certeza, mas não porque é tão rápido quanto C++- porque é mais fácil de usar.
dbliss
132
Todos os usos mais lentos (> 100x) do Python no tiroteio são operações científicas que exigem uma alta contagem de GFlop / s. Você NÃO deve usar python para aqueles de qualquer maneira. A maneira correta de usar o python é importar um módulo que faça esses cálculos e depois passar uma tarde relaxante com sua família. Essa é a forma pítônica :)
Hoje em dia, existem vários compiladores de Python para C ++ , portanto, Python pode ser tão rápido quanto C ++ em alguns casos.
Anderson Green
26
Minha experiência é a mesma dos benchmarks. Python pode ser lento e usar mais memória. Eu escrevo muito, muito menos código e funciona na primeira vez com muito menos depuração. Como ele gerencia a memória para mim, não preciso fazer nenhum gerenciamento de memória, economizando horas de perseguição de vazamentos de núcleo.
E muito mais fácil de manter do que as versões mais longas de Python ou C ++ também. Eu defendo que o tamanho do código-fonte importa, e para certas tarefas simples, scripts de shell concisos são bons.
S.Lott
Também acredito que o tamanho do código-fonte é muito importante e, para algumas tarefas, o Bash é a ferramenta certa para o trabalho. Veja um bom exemplo comparando um script bash simples com python aqui: innolitics.com/articles/programming-languages/… (você precisa rolar um pouco para baixo). Acho que é um exemplo um pouco mais sofisticado do que cat footer.
Ainda é uma comparação ruim, uma vez que ninguém faria as coisas complicadas que os benchmarks tendem a focar no Python puro. Um melhor seria comparar o desempenho de aplicativos realistas, ou C ++ versus NumPy, para ter uma ideia se o seu programa será notavelmente mais lento.
em outras palavras - uma vez que o número crocante é muito mais lento, escreva em C ++ e chame de Python :-)
igouy
1
Se você vai usar uma biblioteca em python para torná-lo mais rápido, então você também pode usar uma biblioteca de processamento de números em c ++. Dessa forma, você mantém a flexibilidade do c ++ sem ter que escrever um monte de código :)
SuperSim135
É um necro sem sentido de nível divino . O OP declara literalmente preferir Python para facilitar a leitura e conveniência, por que alguém usaria diretamente uma linguagem que gosta menos, quando eles podem obter a maioria dos benefícios de desempenho tendo autores de biblioteca cuidando disso por ele? O objetivo de usar bibliotecas é não ter que fazer o tipo de trabalho que elas fazem melhor por conta própria, que uma biblioteca seja uma ligação nativa é um detalhe de otimização / implementação.
milimoose de
6
O problema aqui é que você tem duas linguagens diferentes que resolvem dois problemas diferentes ... é como comparar C ++ com assembler.
Python é para desenvolvimento rápido de aplicativos e para quando o desempenho é uma preocupação mínima.
C ++ não é para desenvolvimento rápido de aplicativos e herda um legado de velocidade de C - para programação de baixo nível.
É o mesmo problema com linguagem de programação gerenciada e fácil de usar como sempre - eles são lentos (e às vezes consomem memória).
Essas são linguagens para fazer controle em vez de processamento. Se eu tivesse que escrever um aplicativo para transformar imagens e também usar Python, todo o processamento poderia ser escrito em C ++ e conectado a Python por meio de ligações, enquanto a interface e o controle de processo seriam definitivamente Python.
Essas bibliotecas já foram escritas para Python, C ou Java, então por que não usar uma linguagem dinâmica para juntá-las?
aoeu256 de
2
Acho que essas estatísticas mostram que o Python é muito mais lento e usa mais memória para esses benchmarks - você tem certeza de que os está lendo da maneira certa?
Na minha experiência, que é principalmente com a escrita de programas ligados à rede e ao sistema de arquivos em Python, o Python não é significativamente mais lento em qualquer aspecto que importe. Para esse tipo de trabalho, seus benefícios superam seus custos.
De fato. Quando o desempenho é um problema, o python é bom em unir módulos externos de alto desempenho ou criar um protótipo do sistema e, em seguida, permitir que os gargalos (geralmente profundos em um loop interno) sejam reescritos como um módulo C etc.
Respostas:
Acho que você está lendo essas estatísticas incorretamente. Eles mostram que o Python é cerca de 400 vezes mais lento que o C ++ e, com exceção de um único caso, o Python consome mais memória. No entanto, quando se trata do tamanho do código-fonte, o Python ganha na linha.
Minhas experiências com Python mostram a mesma tendência definitiva de que Python é da ordem de 10 a 100 vezes mais lento que C ++ ao fazer qualquer processamento de números sério. As razões são muitas, sendo as principais: a) Python é interpretado, enquanto C ++ é compilado; b) Python não tem primitivos, tudo incluindo os tipos embutidos (int, float, etc.) são objetos; c) uma lista Python pode conter objetos de tipos diferentes, então cada entrada deve armazenar dados adicionais sobre seu tipo. Tudo isso prejudica gravemente o tempo de execução e o consumo de memória.
No entanto, isso não é motivo para ignorar o Python. Muitos softwares não requerem muito tempo ou memória, mesmo com o fator de lentidão de 100 vezes. O custo de desenvolvimento é onde o Python ganha com o estilo simples e conciso. Essa melhoria no custo de desenvolvimento geralmente supera o custo de recursos adicionais de CPU e memória. Quando isso não acontece, no entanto, o C ++ vence.
fonte
numpy
escipy
, uma grandepython
base de código provavelmente terá muito código em Python puro, tornando as coisas mais lentas do queC++
. um script python se aproxima da velocidade de umC++
script conforme a porcentagem de seuC
código chega100
, ponto em que não é mais um script python. O python está decolando, com certeza, mas não porque é tão rápido quantoC++
- porque é mais fácil de usar.Todos os usos mais lentos (> 100x) do Python no tiroteio são operações científicas que exigem uma alta contagem de GFlop / s. Você NÃO deve usar python para aqueles de qualquer maneira. A maneira correta de usar o python é importar um módulo que faça esses cálculos e depois passar uma tarde relaxante com sua família. Essa é a forma pítônica :)
fonte
Minha experiência é a mesma dos benchmarks. Python pode ser lento e usar mais memória. Eu escrevo muito, muito menos código e funciona na primeira vez com muito menos depuração. Como ele gerencia a memória para mim, não preciso fazer nenhum gerenciamento de memória, economizando horas de perseguição de vazamentos de núcleo.
Qual é a sua dúvida?
fonte
O tamanho da fonte não é realmente uma coisa sensata para medir. Por exemplo, o seguinte script de shell:
é muito mais curto do que seus equivalentes em Python ou C ++.
fonte
cat footer
.Também: Psyco vs. C ++ .
Ainda é uma comparação ruim, uma vez que ninguém faria as coisas complicadas que os benchmarks tendem a focar no Python puro. Um melhor seria comparar o desempenho de aplicativos realistas, ou C ++ versus NumPy, para ter uma ideia se o seu programa será notavelmente mais lento.
fonte
O problema aqui é que você tem duas linguagens diferentes que resolvem dois problemas diferentes ... é como comparar C ++ com assembler.
Python é para desenvolvimento rápido de aplicativos e para quando o desempenho é uma preocupação mínima.
C ++ não é para desenvolvimento rápido de aplicativos e herda um legado de velocidade de C - para programação de baixo nível.
fonte
É o mesmo problema com linguagem de programação gerenciada e fácil de usar como sempre - eles são lentos (e às vezes consomem memória).
Essas são linguagens para fazer controle em vez de processamento. Se eu tivesse que escrever um aplicativo para transformar imagens e também usar Python, todo o processamento poderia ser escrito em C ++ e conectado a Python por meio de ligações, enquanto a interface e o controle de processo seriam definitivamente Python.
fonte
Acho que essas estatísticas mostram que o Python é muito mais lento e usa mais memória para esses benchmarks - você tem certeza de que os está lendo da maneira certa?
Na minha experiência, que é principalmente com a escrita de programas ligados à rede e ao sistema de arquivos em Python, o Python não é significativamente mais lento em qualquer aspecto que importe. Para esse tipo de trabalho, seus benefícios superam seus custos.
fonte