Dav*_*vid 3 c c++ linux io operating-system
想法/事实#1我正在阅读有关如何缓冲流的文章,因此fwrite()通常是缓冲流.另一方面,write()不会被缓冲. 为什么fwrite libc函数比syscall写函数更快?
想法/事实#2我还在研究有关光盘缓存的文章以及Linux如何大量使用它来大幅改善光盘性能. http://www.linuxatemyram.com/play.html
因此,在存在磁盘缓冲的情况下,Linux默认情况下不应该fwrite()和write()会呈现相同的性能吗?fwrite()正在做的是"缓冲已经缓冲的光盘"!这不应该给予巨大的推动.我在这里失踪了什么?
fwrite 缓冲和磁盘缓存在两个非常不同的级别上工作.
fwrite在程序级别工作:它缓冲许多小写并将它们集中在一起进行一次系统调用,而不是每次小写的单独系统调用.这样可以节省从用户模式切换到内核模式并返回的重复开销.
磁盘缓存在内核级别上工作,通过池化磁盘写入,允许它们被延迟.硬盘可能很慢,因此如果您必须等待磁盘驱动程序使用所有数据,那么您的程序将被延迟.通过使用通常比驱动器快得多的缓存,您可以更快地完成写入并返回到程序.当程序继续运行时,缓存将慢慢清空到磁盘上,而程序不必等待它.