我知道Ruby有自己的内部缓冲区,在写入文件时使用。写入文件时,数据不会立即传递给操作系统(更不用说磁盘),而是先将其写入内存缓冲区。通过调用IO#flush
或关闭文件,可以将此缓冲区刷新到操作系统。
我的问题是如何找出这个缓冲区的最大大小是什么,即Ruby在它总是被刷新之前允许它有多大,即使没有使用flush
或{{1 }}?
答案 0 :(得分:0)
Ruby使用相同的底层机制来存储字符串,就像存储IO缓冲区一样。很好的证据就是IO#write为其缓冲区提供了一个String实例,如果你想提供一个!
Ruby字符串仅受可用内存的限制。因此,IO缓冲区受可用内存的限制。当然,在大多数系统中,可用内存包括磁盘上的交换空间,因此Ruby字符串可能变得非常大(而且非常慢)。
Ruby不只是在缓冲区"填满时才刷新" - 它比这更频繁地转储缓冲区,但我不知道它使用的精确算法。
为了得到关于Ruby何时确定刷新缓冲区的明确答案,您将不得不阅读Ruby io.c源代码(我从此文件的第665行开始{{3 }})。我过去尝试阅读Ruby C源的经验并没有多大的乐趣。