当前位置:  技术问答>linux和unix

多文件读写问题,速度边慢

    来源: 互联网  发布时间:2015-10-16

    本文导语:  写了个多进程程序,每一进程读一个文件同时生成很多文件.1个1g的文件只需要57秒,但是100个10兆文件同时读写,却用了259秒。当然1g文件产生需要写文件远远少于100个10兆所产生的写文件。经过测试发觉瓶颈在io读写90%...

写了个多进程程序,每一进程读一个文件同时生成很多文件.1个1g的文件只需要57秒,但是100个10兆文件同时读写,却用了259秒。当然1g文件产生需要写文件远远少于100个10兆所产生的写文件。经过测试发觉瓶颈在io读写90%,主要是100个文件读取一个文件之后会生成很多个文件,不停的写。
   有同事建议读文件到内存,一次读入500k,写文件的时候先写入内存10k,然后再写入文件。改写程序后发觉io占用确实降低60%左右。但速度依然没有提高,反而比原来降低。一次读入改成1兆,写文件时改成100k,速度有提高,但依然低于原来直接读写的速度。
   我有几个问题:
   1。读写入内存减少io操作是否比直接io速度更快?程序中读入写内存我只是简单的使用memcpy,read等命令,其中多次使用new delete 数组。这样是否会明显降低速度
   2。怎样才能降低速度,改成多线程?或者其他方法?

谢谢。

|
楼主,硬盘明显属于串行设备,并行能力较差,同时读得多个文件理论上就比在高速流状态下处理单个文件要差,原因在于,磁头在读多个文件的时候会产生过于频繁的物理移动,而单个文件确可以节省这个时间,所以能达到最大读写速率。

前面提到的缓存方式对你这样的应用用处也不大,因为连续大量的读写脏数据根本就谈不上什么缓存效率。

如果要提高一些读写效率,也许只有物理上采用多硬盘系统,但仍然还是采用大批量,小并行的方式处理效率更佳。

对多线程或多进程我觉得不必追求数量,一般多线程多进程主要一是因为有很多个任务需要同时进行,串行方式会造成最长响应时间过长,二是有些任务没有完全利用CPU资源,显得浪费。对你这个系统,我觉得CPU资源在多进程下也许利用率因为进程切换的消耗还不如单进程效率高,如果是为了多个文件能取得平均的响应时间,那别无它法,瓶劲应当在硬盘这里。

最后一个可能提高系统效能的方式就是,如果你的多个文件在接收的时候可以进行预处理,那一个方法就是,接管部分硬盘管理的工作,将多个文件分组群集成一个文件,这样,当你读入一块时,里面就已经包含了多个文件的数据,再分发给各个进程进行处理,这样进程并行又不干扰硬盘的串行读写。这是我能想到的最好的并行方法了。

    
 
 

您可能感兴趣的文章:

  • Java读写包括中文的txt文件时不同编码格式问题解决
  • linux 下能否读写.dbf 或者.xls格式的文件,怎样读写?高手指点,拜谢!!!
  • 文件或文件夹,如何指定某用户的读写权限?
  • 在中断服务程序里可以进行文件的读写操作么?
  • 有谁知道,Linux下文件的读写原理是怎样的?急
  • 请问unix下修改文件和文件夹读写权限的问题
  • 父子进程读写文件问题
  • 如何以独占式读写文件?
  • j2me读写,修改本地文件
  • samba文件读写问题
  • 怎样将linux系统底下一个文件夹的只读属性改为可读写的属性?
  • Linux内核中文件进行读写操作的问题
  • ELF文件读写库 ELFIO
  • JAVA Applet能够读写文件吗?
  • 读写大文件出错
  • Java读写MPX文件包 MPXJ
  • 使用mmap可以读写文件,这是怎么实现的?
  • linux下,通过jsp网站进行文件读写,提示permission denied
  • 在linux下有没有想windows下vc一样读写ini 配置文件的库或函数
  • Java中有没有什么类来实现读写注册表文件?
  • 怎么使用 linux 下的 libxml2 库读写 xml 文件和设置属性
  • linux 下 脚本 与 二进制文件 运行速度比较
  • 怎样提高读取文件的速度?
  • 虚拟机下文件共享速度
  • 在眾多的java xml parser中,那種解析器速度最快(xml 文件較大)
  • tcp 文件传输速度慢
  • 加速网络文件系统NFS访问速度 Cachefiles
  • 系统文件自增长,谁知道怎么回事吗?大概每分钟100k左右的速度
  • linux下不知有什么小型的数据库?要求速度比较快,开销最小。并且支持单文件数据库及多表的
  • 请教各位:linux下数百万个文件夹,处理提高存储速度?
  • 几台机器做lvs,使用100M 网线连接,文件系统使用NFS共享,读写速度会出现问题吗?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 菜问题:请问如何根据文件中的一段内容查找文件路径和文件名称,在线等候
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • shell脚本剪切文件文件,并生成新文件的问题
  • 文件编码及UTF-8、BOM、0XFEFF相关问题
  • GUI问题:如何使用文件选择对话框保存文本文件,图像文件??
  • cocos2d中CCSpriteFrameCache文件同时存在两个plist的问题解决
  • 不解,上传文件后压缩文件的中文文件名问题,转码也不管用?
  • ext3文件系统问题:文件在硬盘上的物理位置,一组文件要据此排序。
  • jsp文件访问jar文件,路径问题。
  • Linux www服务 文件夹内文件数量问题
  • 一个奇怪的问题:Red Hat 7.2下用mv复制-粘贴文件变成了剪切-粘贴文件,用mv -b也不行。而两周前同样的机器却没有出现这种问题。alias中m
  • 请教高手一个简单问题:给定一个文件名,如何去查找该文件正在被几个程序使用,并怎么样才可以切断这个文件与正在打开该文件的程序之间的
  • 关于在只读文件系统中,更新文件的问题
  • 高手请进:linux下使用.o文件,makefile文件的问题
  • 2个问题 急-共享文件夹和安装文件
  • 简单的问题,如何用命令 批量 删除某一目录下的 .o 文件?如何批量把只读文件改成可写文件?
  • 小问题, Unix 如何建立一个文件 ,unix 文件有后缀名吗
  • 文件夹或者文件权限问题?
  • 库文件调用库文件问题
  • 问一个问题。请问如何在文件系统管理并使用设备,也就是当一个设备装载,下载时。文件系统是如何实现的
  • C++ I/O 成员 eof():如果处于文件结尾处则返回true
  • Shell脚本如何递归现实一个文件夹中的文件(文件夹中含有文件夹)
  • WinDows8最新版文件夹加密
  • 求命令:什么命令可以把文件夹下所有的文件按修改时间先后排出来,包括子文件夹里的文件。
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • python异常信息堆栈输出到日志文件
  • 请问:proc中的头文件中能包含头文件吗?(感觉如果头文件中包含头文件的话,在链接时就会有错误啊)
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3