为什么 grep 大文件,第二遍就会变得很快呢?

2018-10-25 15:58:35 +08:00
 hujianxin

我 grep 一个大文件,第一遍大约几十秒,第二遍就很快了,几乎秒出,请问这是为什么呢?

5507 次点击
所在节点    Linux
23 条回复
hujianxin
2018-10-26 13:17:38 +08:00
@noli 请教一下,既然没放到缓存中,为什么第二次那么快呢?
Greenm
2018-10-26 15:21:18 +08:00
这个是缓存命中和未命中的问题吧,第一遍全部不命中,第二遍几乎都命中了。
noli
2018-10-26 19:36:28 +08:00
@hujianxin

并不是没有放到缓存中,而是不论多大的文件,怎么放入缓存里面是有讲究的。
而你的观测方法,譬如说,只观察内存和 swap 的总使用量,不一定能说明缓存使用的内部变化。
如果你把 Disk IO 以及内存读写次数也纳入观察了,你才可以发现第二遍读取速度变快的原因。

简单来说就是,grep 读取一个文件是顺序向前读取,文件分片存储在文件系统中(例如 ext 系列等等)
利用好这两个特点,可以写出一个不需要增大缓存使用量也可以提高读取效率的算法。
而这就是 内核或者 FS 提供的,具体如何实现,可以看相关文档或者书籍或者源代码。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/501079

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX