APUE笔记(一):IO效率

本文探讨了APUE中关于IO效率的内容,通过实验展示了不同缓冲区大小对系统调用时间(sys)的影响,指出缓冲IO是对不带缓冲IO的优化,并提出了两个遗留问题:高效率IO选择和内核系统调用的流程。实验结果显示,缓冲区大小约为16384时,IO效率相对较高。
摘要由CSDN通过智能技术生成

2011 -8-24 补充:

1、这里的缓冲不缓冲是针对用户进程而言,磁盘IO肯定会经过内核的高速缓冲,而标准IO呢也使用了缓存(类似我们程序中的BUFFER),如果在标准IO中直接调用系统调用的fsync呢,也不能把缓冲刷到磁盘或者输出中,因为BUFFER在标准IO的缓存中,这时候还需要标准IO的fflush将缓存刷到内核的缓存,然后再fsync才会有作用

2、我这里的例子也是有些问题,用了同样的文件,会不会直接就放到了系统缓存中下一次就不需要读取了(3.9后面也有提醒这个,没有注意)。然后再实验不同文本发现差不多

================分割线

这两天又看APUE,看了前三章,里面的IO、系统调用刚好不太明白。就调研了一番

代码如下:

#include "unistd.h"
//unistd 不带缓冲的io函数,需要自己设立缓冲区,调用系统库
#include "stdio.h"

#define MAXSIZE 16384 //20480 //10240  //32768 // 81920 //1//16384 //4096
/*
 * read write的返回值与参数。
 * read 参数为最大空间,返回已经读取的字节数
 * write 参数为想要写的字节数,返回实际写的字节书
 */
int main(int argc,char * argv[])
{
  char BUFFER[MAXSIZE];

  int n;
  
  while( (n= read(STDIN_FILENO,BUFFER,MAXSIZE)) > 0)
    if( write(STDOUT_FILENO,BUFFER,n) != n)
      printf("写错误\n");

  if( n<0 )
    printf("读错误\n");

  return 0;
  

}



shaw@xxxx $ time ./ne_io < ~/Ebook/apue2.pdf > ~/Ebook/apue3.pdf

缓冲区大小  1

real         0m35.791s
user 0m1.344s
sys         0m34.162s

缓冲区大小 81,920

real         0m0.040s
user

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值