免费注册 查看新帖 |

Chinaunix

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

多线程读取大文件该如何处理? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-03-10 12:50 |只看该作者 |倒序浏览
我的server程序负责给客户机发送大文件数据,server每个线程处理一个客户端!因为文件尺寸比较大,所以不能用互斥锁,否则只有给一个客户机传送完,才能为另外一个客户服务,这期间另外的客户只有等待。为了避免多线程对文件偏移量的互相影响,我每个线程都维护一个long型变量用来保存当前偏移量,在每次读取文件的时候都fseek到这个位置。
     问题是,如果文件特别特别大,那势必会有一个临界点,ftell返回值已经无法保存在long变量里,那该怎么处理呢???

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
2 [报告]
发表于 2010-03-10 13:03 |只看该作者
long ftell(FILE *stream);
ftell的返回值都是long,你想怎样

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
3 [报告]
发表于 2010-03-10 13:29 |只看该作者
long ftell(FILE *stream);
ftell的返回值都是long,你想怎样
chenzhanyiczy 发表于 2010-03-10 13:03


32位机器上,long和int一样,也是4个字节的整数。
在32位系统中,编译时加上参数:-D_FILE_OFFSET_BITS=64,ftell返回类型就是64位的整数。对应的类型可以使用int64_t,或者使用off_t。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
4 [报告]
发表于 2010-03-10 13:43 |只看该作者
32位机器上,long和int一样,也是4个字节的整数。
在32位系统中,编译时加上参数:-D_FILE_OFFSET_BIT ...
happy_fish100 发表于 2010-03-10 13:29



   

论坛徽章:
0
5 [报告]
发表于 2010-03-10 14:00 |只看该作者
我当然知道ftell的返回值的long!我的意思是如果这个文件很大,long不足以保存当前偏移量,该怎么办?难道这个ftell出错么?或者返回一个错误的值?

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
6 [报告]
发表于 2010-03-10 14:02 |只看该作者
IO多线程性能会降低很多的,磁盘寻到需要8.5ms左右
在磁盘上面多线程,这是禁忌

论坛徽章:
0
7 [报告]
发表于 2010-03-10 14:09 |只看该作者
回复 6# egmkang
每块盘一个线程。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
8 [报告]
发表于 2010-03-10 14:12 |只看该作者
我当然知道ftell的返回值的long!我的意思是如果这个文件很大,long不足以保存当前偏移量,该怎么办?难道这 ...
xinyu86725 发表于 2010-03-10 14:00



那肯定出错了

可以使用fgetpos()、 fsetpos()函数

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
9 [报告]
发表于 2010-03-10 14:15 |只看该作者
IO多线程性能会降低很多的,磁盘寻到需要8.5ms左右
在磁盘上面多线程,这是禁忌
egmkang 发表于 2010-03-10 14:02



未必吧
看线程怎么读,同时假如page cache足够大

论坛徽章:
0
10 [报告]
发表于 2010-03-10 22:29 |只看该作者
那这个page cache又是什么呢?是硬盘的固有属性么?还是别的什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP