Comparando tempos de execução [fechado]
-
09-06-2019 - |
Pergunta
Estou tentando obter algumas comparações precisas de tempo de execução entre PHP e Python (e potencialmente qualquer outra linguagem que eu precise incluir).O tempo dentro de um script não é problema meu, mas o tempo dentro de um script não leva em conta tudo, desde o momento em que a solicitação é feita para executar o script até a saída.
1) Vale realmente a pena levar essas coisas em consideração?
2) Supondo que valha a pena levar isso em consideração, como faço isso?
Estou usando um Mac, então tenho acesso aos comandos do Linux e não tenho medo de compilar/criar um comando para me ajudar, só não sei como escrever tal comando.
Solução
Se a sua ideia é comparar os idiomas, eu diria que qualquer coisa fora deles não é relevante para fins de comparação.
No entanto, você pode usar o comando time para medir tudo e compará-lo com o tempo dentro de um script.
Assim:
$ time script.php
HI!
real 0m3.218s
user 0m0.080s
sys 0m0.064s
Ele lhe dará a hora do relógio, a hora do usuário (interpretador de php) e a hora do sistema (hora do sistema operacional)
Se você está pensando na web, fica muito mais difícil porque você estaria misturando a sobrecarga do servidor web e isso nem sempre é fácil de comparar se, digamos, você estiver usando WSGI v/s mod_php.Então você também teria que conectar sondas nas partes da cadeia de serviços da web
Outras dicas
Vale a pena levar em consideração a velocidade se você estiver otimizando o código.Geralmente, você deve saber por que está otimizando o código (como em:uma tarefa específica em sua base de código existente está demorando muito, e não "Ouvi dizer que o PHP é mais lento que o Python").Isso é não vale a pena levar a velocidade em consideração se você não planeja mudar de idioma.Só porque um pequeno módulo faz algo um pouco mais rápido não significa que reescrever seu aplicativo em outro idioma seja uma boa ideia.Existem muitos outros fatores para escolher um idioma além da velocidade.
Você faz benchmark, é claro.Execute as duas bases de código várias vezes e compare o tempo.Você pode usar o tempo comando se ambos os scripts forem executáveis a partir do shell ou usarem a respectiva funcionalidade de benchmarking de cada linguagem;o último caso depende muito da linguagem real, naturalmente.
Bem, você pode usar o comando “time” para ajudar:
you@yourmachine:~$ time echo "hello world"
hello world
real 0m0.000s
user 0m0.000s
sys 0m0.000s
you@yourmachine:~$
E isso contornará o tempo fora do ambiente.
Quanto a saber se você realmente precisa cronometrar esse trabalho extra...isso depende inteiramente do que você está fazendo.Presumo que isso seja para algum tipo de aplicativo da Web, então depende de como a estrutura que você usa realmente funciona ...armazena em cache algum tipo de versão compilada (ou analisada) do script?Nesse caso, o tempo de inicialização será totalmente irrelevante (já que o primeiro hit será o único em que existe o tempo de inicialização).
Além disso, certifique-se de executar seus testes em um loop para poder descontar a primeira execução (e incluir o custo da primeira execução em seu relatório, se desejar).Fiz alguns testes em Java, e a primeira execução é sempre mais lenta devido ao JIT fazer seu trabalho (e o mesmo tipo de acerto pode existir em PHP, Python e qualquer outra linguagem que você tente).