在 UNIX 上读取文件比写入文件更快吗?

在 UNIX 上读取文件比写入文件更快吗?

一个相当迟钝的性能瓶颈归结为这个非常小的查询。我做了一些实证分析,我认为我可能会受到磁盘缓存策略的影响。从根本上来说(如果禁用磁盘缓存)写入文件会与读取文件一样快、更慢还是更快?我假设答案取决于碎片(和文件大小),但写入文件的操作必须额外查找下一个空闲块的位置,而不是仅仅跟随指向它的指针。

答案1

这取决于。这个问题没有通用的答案。

在没有缓存的情况下,写入磁盘文件通常比读取慢得多。这与操作系统关系不大,而与硬件有关:硬盘和固态介质的读取速度都比写入速度快。第二个因素与文件系统结构有关:读取只需要遍历目录树和块列表到数据,然后读取数据,而写入需要执行相同的遍历,然后写入数据,然后更新一些元数据。

当缓存发挥作用时,情况就会发生变化。读取缓存中的数据非常快,但是读取不在缓存中的数据必须从磁盘中获取。操作系统可能会尝试预测读取,但这仅适用于非常特定的情况(主要是从文件中顺序读取)。另一方面,只要数据量不太大,写入就可以接近瞬时,因为数据仅写入内存缓冲区。缓冲区最终必须写入磁盘,但那时您的应用程序已经开始执行更多操作。

答案2

写作应该更快。

空闲块列表保存在内存中,因此找到下一个空闲块会非常快。除非您以同步模式写入,否则当您尝试写入某些内容时,它只会将数据复制到内核缓冲区并将写入排队;它不必等待 I/O 完成。

另一方面,读取必须等待 I/O 完成,因为调用者在数据到达之前无法执行任何操作。

相关内容