免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2279 | 回复: 1
打印 上一主题 下一主题

stdio对比unistd仅仅是多了一层缓存么? [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-09 22:47 |只看该作者 |倒序浏览
10可用积分
fwrite和write相比,仅仅是fwrite多了一层用户级的缓存? 不同每次写入都要从用户切换到内核态,然后再回来,而是写满了stdio的缓存(512byte)以后再flush到内核?
如果我说的是正确地,那么当我fwrite每次写入的量都比较大(写入的原子远大于512byte)的时候,这个所谓的stdio的缓存,岂不是一点用都没有,平添了系统负担,反而比我直接write()更慢了?

我的这个说法有没有问题? 什么情况下fwrite的性能不如直接使用write(),fread()的性能不如直接使用read()?

最佳答案

查看完整内容

用途:fwrite是给整个星球的人用,没假设你一次写多大的数据块,正所谓通用而且这个“512B”和编译器或OS或存储设备有很大关系,对应用程序来说应该透明如果你很明白的自己应用场景,写数据块很大,那直接用write就完事了,没什么好顾虑的性能:这经常被夸大了,你程序的瓶颈在于fwrite与write的性能差别吗?至于系统IO与标准IO性能实测,APUE第3章和第5章有详尽描述,请参考因为标准IO缓存都设置了最佳IO大小(如单页4K,可以看FI ...

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2012-03-09 22:47 |只看该作者
用途:
fwrite是给整个星球的人用,没假设你一次写多大的数据块,正所谓通用
而且这个“512B”和编译器或OS或存储设备有很大关系,对应用程序来说应该透明
如果你很明白的自己应用场景,写数据块很大,那直接用write就完事了,没什么好顾虑的

性能:
这经常被夸大了,你程序的瓶颈在于fwrite与write的性能差别吗?
至于系统IO与标准IO性能实测,APUE第3章和第5章有详尽描述,请参考

因为标准IO缓存都设置了最佳IO大小(如单页4K,可以看FILE结构的成员st_blksize)
当数据块接近st_blksize时,fwrite/write非常接近,几无差别
当数据块很大(比st_blksize),直接write更快,write只需一次系统调用,而直接fwrite需要多次系统调用
当数据块很小(比st_blksize),直接fwrite更快,fwrite多次才会有一次系统调用,而直接write需要更多次系统调用
fread与read同理
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP