以下の例は私を驚かせました。それは、直感に反するようです... コンボのためのより多くのユーザー時間があるという事実は別としてecho | sed
。
単独で実行する場合echo
、なぜそんなに多くのsys時間を使用するのでしょうか、または質問sed
は「プレイの状態をどのように変更するのですか?」と思われるecho
でしょうが、同じ行う必要があるエコー-INGのを両方のケースで...
time echo -n a\ {1..1000000}\ c$'\n' >file
# real 0m9.481s
# user 0m5.304s
# sys 0m4.172s
time echo -n a\ {1..1000000}\ c$'\n' |sed s/^\ // >file
# real 0m5.955s
# user 0m5.488s
# sys 0m1.580s
1
私の腸の反応は、それがバッファリングに関係しているということです。
—
バハマ
@bahamatあなたは正しいと思います。エコーは、引数ごとに個別のwrite()を実行します。sedはそれらをバッファリングします。したがって、最初のバージョンでは、ファイルシステムドライバーを経由してブロックデバイスレイヤーに移動する通常ファイルへの100万回の書き込みがあり、2番目のバージョンでは、パイプに行く100万回の書き込みと、カーネルコードのより高価なレイヤーを通過する書き込みが多少少なくなります。
—
アランカレー
@bahamat間違いなくバッファリング。
—
StarNamer
time echo ... |cat >file
またtime echo ... |perl -ne 'print'
、sed
バージョンと同様の時間です。
良い説明をしてくれたみんなに感謝します...だから、大きな複数行の書き込み(bashで)の場合、猫は猫の有用な使用法を獲得しました:)
—
Peter.O