Ruby I/O内部缓冲区大小

Ruby I/O内部缓冲区大小,ruby,io,Ruby,Io,我知道Ruby有自己的内部缓冲区,在写入文件时使用。写入文件时,数据不会立即传递到操作系统(更不用说磁盘),而是首先写入内存缓冲区。通过调用IO#flush或关闭文件,可以将此缓冲区刷新到操作系统 我的问题是如何找出这个缓冲区的最大大小,也就是说,即使不使用flush或fsync,Ruby在总是刷新之前允许它有多大?Ruby使用与存储IO缓冲区相同的底层机制来存储字符串。很好的证据是IO#write将字符串实例作为其缓冲区,如果您想提供一个实例的话 Ruby字符串仅受可用内存的限制。因此,IO缓

我知道Ruby有自己的内部缓冲区,在写入文件时使用。写入文件时,数据不会立即传递到操作系统(更不用说磁盘),而是首先写入内存缓冲区。通过调用
IO#flush
或关闭文件,可以将此缓冲区刷新到操作系统


我的问题是如何找出这个缓冲区的最大大小,也就是说,即使不使用
flush
fsync
,Ruby在总是刷新之前允许它有多大?

Ruby使用与存储IO缓冲区相同的底层机制来存储字符串。很好的证据是IO#write将字符串实例作为其缓冲区,如果您想提供一个实例的话

Ruby字符串仅受可用内存的限制。因此,IO缓冲区受到可用内存的限制。当然,在大多数系统中,可用内存包括磁盘上的交换空间,因此Ruby字符串可能会变得非常大(而且速度非常慢)

Ruby不只是在缓冲区“填满”时刷新—它转储缓冲区的频率更高,但我不知道它使用的精确算法

为了得到关于Ruby何时决定刷新缓冲区的明确答案,您必须阅读Ruby io.c源代码(我从本文件的第665行开始)。我过去尝试阅读Ruby C源代码的经历并不是很有趣