Palavras de contagem: o que usará menos CPU, wc ou um script perl?

0

Meu objetivo é contar as palavras em um arquivo usando a CPU mínima possível.

Eu poderia usar o comando wc ou escrever um script perl simples para isso, qual das duas opções consumiria menos CPU?

    
por yael 29.10.2013 / 14:46

3 respostas

5

Eu suspeito que wc usará menos tempo de CPU, está escrito em C e foi cuidadosamente otimizado ao longo do tempo. No entanto, não há razão para não testar isso sozinho. time permitirá que você compare o desempenho do seu script perl com wc . Usando o comando time , você deve obter uma saída como:

> time wc /usr/share/dict/words
 119095  119095 1145922 /usr/share/dict/words
wc /usr/share/dict/words  0.03s user 0.00s system 98% cpu 0.030 total

Nesse caso, wc usou 0,030 segundos de tempo de CPU no total.

    
por 29.10.2013 / 14:59
2

Geralmente, é ao tentar resolver um problema que pode ser completamente encapsulado por uma única ferramenta de linha de comando, como wc , que eles têm mais desempenho do que qualquer outra coisa.

É somente quando você tem que começar a encadear vários "comandos" juntos, faz sentido fazer a transição da solução de encadear os dois para resolver o problema em uma linguagem de nível mais alto, como Perl, Python ou Ruby.

A despesa em encadear os comandos em conjunto geralmente vem na forma de ter que repetidamente continuar a executar as ferramentas simples muitas vezes.

    
por 29.10.2013 / 15:21
2

Concordo com @wingedsubmariner, wc quase certamente será mais rápido do que qualquer versão em perl que você criar:

$ /usr/bin/time -f "%Uuser %Ssystem %Eelapsed %PCPU" wc /usr/share/dict/words
 99171  99171 938848 /usr/share/dict/words
0.02user 0.00system 0:00.02elapsed 86%CPU
$ /usr/bin/time -f "%Uuser %Ssystem %Eelapsed %PCPU" \
  perl -ane '$k+=$#F+1; END{print "$k\n"}' /usr/share/dict/words
99171
0.09user 0.00system 0:00.09elapsed 96%CPU
    
por 29.10.2013 / 15:40

Tags