我正在开发的东西包含一个我制作的生成输出的程序和一个我没有制作的程序(并且非常希望不必更改它)使用它。我正在使用一个用mkpipe
. 由于 Linux FIFO 缓冲区很小,我怀疑我有性能瓶颈。(如果不修补内核,就无法更改这样的大小。)
有没有替代的类似 FIFO 的东西我可以用一个缓冲区,比如几十兆字节?not-made-by-me 程序可以读取任何可以有文件系统名称的东西 - /dev/stdin
,一个命名管道(就像它现在所做的那样),一个真实的文件,/dev/any-character-device
......
如果没有其他替代方案,即使是第三方免费内核模块也可以。
如图所示,命名管道吞吐量没有问题,因此如果您的写入器比您的读取器快,并且两者都以恒定速率工作,则无论缓冲区大小如何,您的整个任务都将与读取器一样慢。
但是,如果您的编写器以突发方式产生输出,并且在它们之间有停顿,那么更大的缓冲区是一个优势。
有一个实用程序 ( buffer(1)
),用于写入磁带,它缓冲输入并让它以恒定速率运行(默认情况下,尽可能快)。
your-producer | buffer > fifo & your-consumer fifo
Run Code Online (Sandbox Code Playgroud)
它在 Debian 软件包中buffer
,或者直接从这里下载。