未缓冲文件I/O的后果



使用未缓冲的文件I/O将大量数据写入磁盘(至少对于操作系统级别以上的所有内容)的后果是什么?

细节:

我正在编写一个Ruby脚本,它将执行另一段代码,捕获其标准输出和标准错误并将它们写入文件。显然(至少在Ruby中),标准错误没有被缓冲,而标准输出被缓冲,在我的例子中,这会导致无序输出,因为标准错误行在一些标准输出行之前被打印。

似乎解决方案是使这部分代码使用无缓冲IO(与IO.sync = true)。但是,我的脚本正在运行的代码段也将向磁盘写入大量文本。所以我想知道不使用Ruby缓冲区(只使用OS缓冲区及以下)的后果是什么,如果它很重要,我还能如何解决排序问题?

当写操作计数较小时,非缓冲I/O比缓冲I/O慢,而当写操作计数较大时,情况正好相反。在每个操作大约1,000到10,000字节的中间范围内,它没有太大的区别。

当操作对齐时,您还会看到稍好的性能

IO.sync所做的是切换缓冲区的自动刷新,但不改变它仍然被缓冲的事实。

你可能想要的是完全绕过缓冲系统,而使用io# syswrite:

STDERR.syswrite("Look ma, no buffers")

正如文档所说,您应该选择缓冲的或未缓冲的,并坚持使用,因为混合和匹配可能会导致问题。

相关内容

  • 没有找到相关文章

最新更新