【发布时间】:2019-05-28 14:50:47
【问题描述】:
有an IO example from Advanced Programming in Unix Environment:
#include "apue.h" #define BUFFSIZE 4096 int main(void) { int n; char buf[BUFFSIZE]; while ((n = read(STDIN_FILENO, buf, BUFFSIZE)) > 0) if (write(STDOUT_FILENO, buf, n) != n) err_sys("write error"); if (n < 0) err_sys("read error"); exit(0); }所有普通的 UNIX 系统 shell 都提供了一种打开文件进行读取的方法 在标准输入上创建(或重写)文件 标准输出,并允许用户利用 shell 的 I/O 重定向工具。
图 3.6 显示了读取 516,581,760 字节的结果 文件,使用 20 种不同的缓冲区大小,具有标准输出 重定向到 /dev/null。本次测试使用的文件系统是 具有 4,096 字节块的 Linux ext4 文件系统。 (st_blksize 值是 4,096。)这占系统时间的最小值 发生在几个定时测量周围开始 BUFFSIZE 为 4,096。将缓冲区大小增加到超出此限制已 积极作用不大。
-
BUFFSIZE如何影响读取文件的性能?BUFFSIZE增加到 4096,为什么性能 提升?随着BUFFSIZE增加到 4096 以上,为什么 性能没有明显提升? -
内核缓冲区(不是
buf,大小为BUFFSIZE程序)对性能的帮助,与BUFFSIZE相关?BUFFSIZE较小时,内核缓冲区是否有助于积累 小写,所以要提高性能?
【问题讨论】:
-
嗨蒂姆。我们试图减少此处帖子上的闲聊材料,特别感谢,请帮助我,非常感谢等。有a canonical reference on Meta。我通常不会针对次要项目提及它,但您有 872 个,所以我假设您不知道链接的帖子。这里倾向于简洁的文档风格。