質問: なぜファイルをメモリに読み込んで2回計算するよりも2倍速く反復するのですか? 私は以下を比較していますtail -n 1000000 stdout.log | grep -c '"success": true' tail -n 1000000 stdout.log | grep -c '"success": false' 次のlog=$(tail -n 1000000 stdout.log) echo "$log" | grep -c '"success": true' echo "$log" | grep -c '"success": false' 驚いたことに、2番目は最初の3倍近く時間がかかります。もっと速くなるはずですよね?
回答: 実際、最初のソリューションもファイルをメモリに読み込みます!これはcachingと呼ばれ、オペレーティングシステムによって自動的に行われます。 mikeserv ですでに正しく説明されているように、最初の解決策はgrepwhileを除外し、ファイルは読み取られますが、 2番目のソリューションは、ファイルをtailが読み取った後後に実行します。したがって、さまざまな最適化のため、最初のソリューションはより高速です。しかし、これは常に本当である必要はありません。 osが2番目のソリューションをキャッシュしないと決定した非常に大きなファイルの場合、高速になる可能性があります。ただし、メモリに収まらないさらに大きなファイルの場合、2番目のソリューションはまったく機能しません。