我注意到随后的运行grep
在同一查询(以及不同的查询,但在同一文件上)上比第一次运行要快得多(在搜索大文件时效果很容易注意到)。
这表明 grep 使用了某种用于搜索的结构缓存,但我在互联网上找不到参考。
什么机制可以grep
在后续搜索中更快地返回结果?
答案1
不是 grep 本身,而是文件系统本身经常缓存最近读取的数据,导致以后的运行速度更快,因为 grep 有效地在内存而不是磁盘中搜索。
答案2
Linux 和 *NIX 系统利用位于文件系统(通过 VFS 抽象)和用户级进程之间的各种缓存。所以它不是 grep,也不是文件系统进行缓存——而是操作系统。
负责 grep 性能的缓存是 VFS 缓冲区缓存。其他缓存用于索引节点和目录,但这些缓存在这里不会发挥作用。
有关更多信息,请参阅:Linux 文档项目:9.2 虚拟文件系统http://tldp.org/LDP/tlk/fs/filesystem.html
答案3
如果你是寻找 grep 的缓存版本,查看https://stackoverflow.com/questions/7734596/grep-but-indexable