Quero demonstrar um pequeno teste. Pequeno mesmo, pois se trata apenas de um Hello World escrito em Python, em Shell e em C.
-- Mas qual o objetivo?
O objetivo é mostrar a diferença que existe no tempo de execução "em milisegundos" de um simples Hello World escrito em linguagens diferentes.
Lembrando que C se diferencia das outras linguagens aqui citadas por se tratar de uma liguagem compilada (Python e Shell são interpretadas).
Apesar de milisegundos parecer pouco, quando trazemos para a vida real e executamos vários processos, com vários arquivos, de forma repetida, essa "pequena" diferença pode influenciar bastante.
Primeiro, em Python:
< arquivo: hello.py >
#!/usr/bin/python3
print('Hello World')
Em seguida, em Shell, na qual testaremos com echo e com printf:- echo
#!/bin/bash
echo "Hello World"
- printf
#!/bin/bash
printf "Hello World\n"
Tradução livre da diferença entre echo e printfTanto o echo quanto o printf são comandos internos do Bash, sendo que o printf se tornou um comando interno a partir do Bash v. 4.1.7. O echo sempre finaliza sua execução com status 0, e simplesmente imprime os argumentos seguidos por EOL (caractere "end of line", ou seja, quebra de linha) na saída padrão, enquanto printf permite a definição de uma string de formatação e fornece um código de status diferente de 0 em caso de falha.
Unix Stack Exchange
* Vale lembrar que você pode evitar o caractere EOL no comando echo, mas não por padrão.
Por fim, em C:
< arquivo: hello.c >
#include <stdio.h>
int main(void) {
printf("Hello World\n");
return 0;
}
Pronto. Códigos criados, compilação concluída, permissões de execução dadas, vamos rodar com o comando time e verificar o resultado:Conforme a imagem, o Python foi o que mais demorou para exibir o texto "Hello World":
real 0m0.036s
user 0m0.018s
sys 0m0.018s
Em seguida, o shell script (tanto o echo quanto o printf):
real 0m0.014s
user 0m0.006s
sys 0m0.000s
Por fim o C, que foi o mais rápido:
real 0m0.011s
user 0m0.001s
sys 0m0.001s
Para finalizar, testaremos um loop no qual o shell imprime 1000 vezes o Hello World, direcionando a saída padrão para /dev/null
Vamos utilizar dois formatos de iteração. O formato convencional e o "BRACE EXPANSION" {START..END} apenas para demonstração
Em Python:
$ time for ((i=0;i<=999;i++)) ; do /usr/bin/python3 -c 'print("Hello World")' > /dev/null ; done
real 0m31.275s
user 0m26.692s
sys 0m4.638s
$ time for i in {0..999} ; do /usr/bin/python3 -c 'print("Hello World")' > /dev/null ; done
real 0m31.585s
user 0m26.565s
sys 0m5.034s
Em Shell:- echo
$ time for ((i=0;i<=999;i++)) ; do echo "Hello World" > /dev/null ; done
real 0m0.030s
user 0m0.020s
sys 0m0.010s
$ time for i in {0..999} ; do echo "Hello World" > /dev/null ; done
real 0m0.028s
user 0m0.009s
sys 0m0.019s
- printf
$ time for ((i=0;i<=999;i++)) ; do printf "Hello World\n" > /dev/null ; done
real 0m0.030s
user 0m0.022s
sys 0m0.009s
$ time for i in {0..999} ; do printf "Hello World\n" > /dev/null ; done
real 0m0.028s
user 0m0.009s
sys 0m0.019s
Observe que obtivemos resultados próximos entre os comandos echo e printf, e que em ambos os casos a utilização do "Brace Expansion" trouxe um pequeno ganho de velocidadeEm C:
$ time for ((i=0;i<=999;i++)) ; do ./hello > /dev/null ; done
real 0m1.589s
user 0m1.175s
sys 0m0.541s
$ time for i in {0..999} ; do ./hello > /dev/null ; done
real 0m1.527s
user 0m1.156s
sys 0m0.493s
Finalizamos os testes com o LOOP e pudemos observar que o Python levou quase 32 segundos para finalizar a execução, enquanto o C realizou em aproximadamente 2 segundos e o shell em apenas 30 milisegundos.Não quero com isso afirmar que a linguagem A é mais rápida que a linguagem B, afinal não tenho grandes conhecimentos de programação e otimização de código, mas é importante analisar que "milisegundos" podem acelerar bastante a conclusão de alguns procedimentos no dia a dia de um sys-admin.
Abraços, galera.
0 comments:
Postar um comentário