Diferenças de tempo de execução entre comandos de tempo

0

No meu entender, quanto mais comandos eu executar para obter uma saída desejada, mais o tempo de execução será necessário.

Vamos analisar isso:

time find /opt/platforms/ -name '*trading*cfg' | xargs grep SenderCompID | awk -F= '{print $2};

real    0m0.008s
user    0m0.000s
sys     0m0.000s

Qual é um ótimo tempo de execução.

Eu embelezo essa linha feia:

time find /opt/platforms/ -name '*trading*cfg' -exec grep SenderCompID {} \; | awk -F= '{print $2}'

real    0m0.076s
user    0m0.004s
sys     0m0.008s

E apesar de ter reduzido um pipe e usado o find -exec , o tempo é um pouco mais longo.

Eu o levo ainda mais longe e uso apenas para encontrar, sem tubos:

time find /opt/platforms/ -name '*trading*cfg' -exec sed -n '/SenderCompID/s/.*=\(.*\)//p' {} \;

real    0m0.076s
user    0m0.008s
sys     0m0.012s

O resultado "pior".

Digamos que eu esteja em um dispositivo de rede montado, isso pode ser 10x no tempo e as pequenas diferenças seriam significativas.

Alguém pode explicar como o comando aparentemente mais eficiente leva mais tempo para ser executado? Obrigado

    
por Moshe 25.06.2017 / 08:46

1 resposta

1

Seu "embelezamento" piorou o tempo de execução. O programa xargs chamará grep com vários arquivos, enquanto -exec chamará grep para cada arquivo (você pode verificar se está substituindo grep por echo ). Se grep puder processar vários arquivos durante cada chamada, ela será chamada menos vezes (nenhuma inicialização é necessária, nenhuma sobrecarga de chamada). O mesmo vale se você chamar sed em vez de grep .

    
por 25.06.2017 / 10:58

Tags