時間コマンド間の実行時間差

時間コマンド間の実行時間差

私が理解しているのは、必要な出力を得るためにより多くのコマンドを実行するほど、実行時間が長くなります。

一度見てください。

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

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

これは良い実行時間です。

私はこの醜いラインを美しく飾った。

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

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

チューブ一つ減って書いてみましたがそれでもfind -exec時間が少しかかりましたね。

私はさらに一歩進み、パイプなしでfindを使用しました。

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

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

「悪い」結果。

インストールされたネットワークデバイスにあると仮定すると、この時間は10倍になる可能性があり、小さな違いはかなり大きくなります。

一見すると、より効率的に見えるコマンドが実行するのに最も長い時間がかかる理由を説明できる人はいますか?ありがとう

答え1

あなたの「美化」のために実行時間が悪くなります。プログラムは複数のファイルをxargs呼び出し、各ファイルは同時に呼び出されます(交換されたことを確認できます)。各呼び出し中に複数のファイルを処理できる場合は、呼び出しの数が減ります(開始は必要なく、呼び出しのオーバーヘッドはありません)。代わりに呼び出す場合も同様です。grep-execgrepgrepechogrepsedgrep

関連情報