几乎所有现代的操作系统都由内核直接管理文件数据在内存中的缓冲。
这是一个强有力的特性,并且在极大程度上操作系统做的非常好。
比如在Linux系统上,让我们看看第一次读取一个文件和第二次读取同样的文件所需要的时间:colm@coroebus:~$ time cat testfile > /dev/null
real 0m0.065s
user 0m0.000s
sys 0m0.001s
colm@coroebus:~$ time cat testfile > /dev/null
real 0m0.003s
user 0m0.003s
sys 0m0.000s
即使对于这样的一个小文件,两次读取的时间差异也十分惊人。
这是由于内核在内存中缓存了文件的内容。
通过确保在你的系统上始终存在"多余的"内存,你就可以确保会有越来越多的文件内容被缓存在这个缓冲区中。
这是一个非常有效的内存缓冲途径,并且根本无需对Apache作出任何额外的配置。
另外,由于操作系统知道文件何时被修改或删除了,它就可以自动的从内存缓冲区中删除失效的文件内容。
这是一个优于Apache自身的内存缓冲区的巨大优点,因为Apache无法得知文件被修改或删除的信息。
尽管操作系统自动管理的缓冲区有着性能和洞悉文件状态的优势,但是在某些情况下Apache自己的内存缓冲却更加有效。
首先,操作系统只能缓存它自己知道的文件,如果你将Apache当作一个代理服务器运行,那么Apache可以缓存非本地文件。
如果你还想要无可匹敌的内存缓存速度,也必须使用Apache自己的内存缓冲区。