评分最高的答案声称 IO 很慢。
这是一个快速基准测试,它具有足够大的缓冲区以使操作系统脱离关键性能路径,但前提是您愿意接收巨大的输出。如果第一个字节的延迟是您的问题,您需要在“dribs”模式下运行。
从 9 字节数组中写入 1000 万条记录
在 gcc 4.6.1 下 3GHz CoreDuo 上的 Mint 12 AMD64
340ms to /dev/null
710ms to 90MB output file
15254ms to 90MB output file in "dribs" mode
Clang 3.0 下 2.4GHz CoreDuo 上的 FreeBSD 9 AMD64
450ms to /dev/null
550ms to 90MB output file on ZFS triple mirror
1150ms to 90MB output file on FFS system drive
22154ms to 90MB output file in "dribs" mode
如果你能负担得起适当的缓冲,那么 IO 就没有什么慢了。
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char* argv[])
{
int dribs = argc > 1 && 0==strcmp (argv[1], "dribs");
int err;
int i;
enum { BigBuf = 4*1024*1024 };
char* outbuf = malloc (BigBuf);
assert (outbuf != NULL);
err = setvbuf (stdout, outbuf, _IOFBF, BigBuf); // full line buffering
assert (err == 0);
enum { ArraySize = 9 };
char temp[ArraySize];
enum { Count = 10*1000*1000 };
for (i = 0; i < Count; ++i) {
fwrite (temp, 1, ArraySize, stdout);
if (dribs) fflush (stdout);
}
fflush (stdout); // seems to be needed after setting own buffer
fclose (stdout);
if (outbuf) { free (outbuf); outbuf = NULL; }
}