gpt4 book ai didi

c++ - fwrite() 与 write() 存在磁盘缓存

转载 作者:太空狗 更新时间:2023-10-29 20:24:08 25 4
gpt4 key购买 nike

想法/事实#1我读了一些关于如何缓冲流的文章,所以 fwrite() 通常是缓冲流。另一方面 write() 不会被缓冲。 Why the fwrite libc function is faster than the syscall write function?

想法/事实#2我还研究了有关磁盘缓存的文章以及 Linux 如何大量使用它来显着提高磁盘性能。 http://www.linuxatemyram.com/play.html

因此,在 Linux 默认执行的磁盘缓冲存在的情况下,fwrite() 和 write() 不应该呈现相同的性能吗? fwrite() 正在做的是“缓冲已经缓冲的光盘”!这不应该给巨大的插入。我在这里缺少什么?

最佳答案

fwrite 缓冲和磁盘缓存在两个截然不同的级别上工作。

fwrite 在程序级别工作:它缓冲大量小写入并将它们集中在一起以进行一次系统调用,而不是针对每个小写入进行单独的系统调用。这为您节省了从用户模式切换到内核模式并返回的重复开销。

磁盘缓存在内核级别工作,通过汇集磁盘写入,允许它们被延迟。硬盘可能很慢,所以如果您必须等待磁盘驱动程序消耗完所有数据,那么您的程序就会延迟。通过使用通常比驱动器快得多的缓存,您可以更快地完成写入并返回到程序。当程序继续运行时,缓存将慢慢清空到磁盘上,程序无需等待。

关于c++ - fwrite() 与 write() 存在磁盘缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29760797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com