私のUbuntu/Linuxシステムのダッシュには、同じプログラムの2つのバージョンがあります。
対応する。desktopファイルがどこにあるかを見つけるために私は使用しました
find / -type f -name 'Sublime Text.desktop' 2> /dev/null
ヒット数がゼロだったので、(成功して)やりました
find / -type f -name '[s,S]ublime*.desktop' 2> /dev/null
検索語は最初の検索語よりもかなり大きいはずなので、約3秒後に終了したことに驚きました。私にとっては静かなコーシャではなかったので、最初のコマンドをもう一度実行しましたが、驚いたことに、終了するのに約3秒しかかかりませんでした。
動作を確認するために、2番目のLinuxボックスの電源を入れ、最初のコマンドを再度実行しましたが、今回はtime
を使用しました。
time find -type f -name 'Sublime Text.desktop' 2> /dev/null
find
は、同じ検索語の検索を高速化するだけでなく、(同じパス内の)すべての検索を高速化します。 「関連のない」文字列の検索でさえ遅くなることはありません。
time find / -type f -name 'Emilbus Txet.Potksed' 2> /dev/null
検索プロセスをめちゃくちゃスピードアップするために、findは何をしますか?
2回目の検索が高速である理由は、Linuxがファイル caching を実行するためです。ファイルが最初にアクセスされるときはいつでも、ファイルの内容をメモリに保持します(もちろん、空きがある場合にのみそれを行いますRAM使用可能)。ファイルがで再度読み取られる場合後で、実際にファイルを再度読み取ることなく、メモリからコンテンツをフェッチすることができます。メモリアクセスはディスクアクセスよりもはるかに高速であるため、全体的なパフォーマンスが向上します。
つまり、最初のfind
では、ほとんどのファイルがまだメモリにないため、Linuxは多くのディスク操作を実行する必要があります。これは遅いので、少し時間がかかります。
find
を再度実行すると、ほとんどのファイルとディレクトリがすでにメモリ内にあり、はるかに高速です。
2つのfind実行の間に キャッシュをクリア の場合、これを自分でテストできます。次に、2番目の検索は最初の検索より速くなりません。これが私のシステムでどのように見えるかです:
# This clears the cache. Be careful through, you might loose some data (Although this shouldn't happen, it's better to be sure)
$ sync && echo 3 | Sudo tee /proc/sys/vm/drop_caches
3
$ time find /usr/lib -name "lib*"
find /usr/lib/ -name "lib*" 0,47s user 1,41s system 8% cpu 21,435 total
# Now the file names are in the cache. The next find is very fast:
$ time find /usr/lib -name "lib*"
find /usr/lib/ -name "lib*" 0,19s user 0,28s system 69% cpu 0,673 total
# If we clear the cache, the time goes back to the starting time again
$ sync && echo 3 | Sudo tee /proc/sys/vm/drop_caches
3
$ time find /usr/lib -name "lib*"
find /usr/lib/ -name "lib*" 0,39s user 1,45s system 10% cpu 16,866 total