社区
Linux/Unix社区
帖子详情
用多进程读写文件的效率为什么会远远不如一个进程直接IO的效率
viki34
2012-10-06 09:00:20
请高手解答:上主要代码:
...全文
653
10
打赏
收藏
用多进程读写文件的效率为什么会远远不如一个进程直接IO的效率
请高手解答:上主要代码:
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qq120848369
2012-10-08
打赏
举报
回复
stdio是FILE结构体内带buffer而已,缓存是为了减少磁盘I/O,不代表就会加速I/O,另外多线程写慢是因为磁盘寻道太折腾了,顺序写最快。
jackyjkchen
2012-10-07
打赏
举报
回复
[Quote=引用 6 楼 的回复:]
追问:
我在测试IO效率的时候,比较无缓冲IO,和标准IO。
发现标准IO的效率只有在首次执行的时候比无缓冲IO慢,之后就差不多了。
在网上看的解释说,标准IO会调用操作系统的页缓冲区,pagecache。那么也就是说,APUE上所说标准IO的全缓冲,行缓冲都是对于这个PAGECACHE来说的吗?
[/Quote]
不是的吧,标准I/O的缓冲是库函数自己实现的,数据累积到一定大小之后才调用system call,并不依赖于操作系统机制,操作系统还有自己的缓冲,当然这是我的想法,不确定。
但我认为,真正调用system call之前不可能会涉及到页缓冲的,而且标准库可以自行调整缓冲区大小不是么
fdl19881
2012-10-07
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
引用 7 楼 的回复:
引用 6 楼 的回复:
追问:
我在测试IO效率的时候,比较无缓冲IO,和标准IO。
发现标准IO的效率只有在首次执行的时候比无缓冲IO慢,之后就差不多了。
在网上看的解释说,标准IO会调用操作系统的页缓冲区,pagecache。那么也就是说,APUE上所说标准IO的全缓冲,行缓冲都是对于这个PAGECACHE来说的吗?
不是的吧,标准I/O的……
[/Quote]
虽然我没看标准IO函数的源码,但是我猜测:
有缓冲的标准IO函数在第一次fwrite或者fprintf的时候会分配缓中内存,,所以第一次会慢,后面就差不多了。有缓冲和无缓冲的速度差不多是建立在他们每次写入或者读出的字节数比较大(如几KB以上)。。如果一次写几个字节,那肯定是有缓冲的标准IO快。
标准IO的缓冲确实是为库自己实现的。
viki34
2012-10-07
打赏
举报
回复
追问:
我在测试IO效率的时候,比较无缓冲IO,和标准IO。
发现标准IO的效率只有在首次执行的时候比无缓冲IO慢,之后就差不多了。
在网上看的解释说,标准IO会调用操作系统的页缓冲区,pagecache。那么也就是说,APUE上所说标准IO的全缓冲,行缓冲都是对于这个PAGECACHE来说的吗?
viki34
2012-10-07
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
了解一下计算机各级器件的大概性能差距吧
CPU大概比二级缓存快1个数量级,二级缓存大概比内存快1-2个数量级,内存大概比硬盘(极限速度)快2个数量级,而机械硬盘的磁头寻址大概是ms级,磁头寻址一次,CPU能跑大约百万条指令
换句话说,胡乱并行机械硬盘的I/O,多一次磁头寻址,意味着浪费了百万条CPU指令时间
[/Quote]
惭愧啊
viki34
2012-10-07
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:
追问:
我在测试IO效率的时候,比较无缓冲IO,和标准IO。
发现标准IO的效率只有在首次执行的时候比无缓冲IO慢,之后就差不多了。
在网上看的解释说,标准IO会调用操作系统的页缓冲区,pagecache。那么也就是说,APUE上所说标准IO的全缓冲,行缓冲都是对于这个PAGECACHE来说的吗?
不是的吧,标准I/O的缓冲是库函数自己实现的,数据累积……
[/Quote]
那么为什么,在第二次执行标准IO的时候效率会大幅度提升。
jackyjkchen
2012-10-06
打赏
举报
回复
了解一下计算机各级器件的大概性能差距吧
CPU大概比二级缓存快1个数量级,二级缓存大概比内存快1-2个数量级,内存大概比硬盘(极限速度)快2个数量级,而机械硬盘的磁头寻址大概是ms级,磁头寻址一次,CPU能跑大约百万条指令
换句话说,胡乱并行机械硬盘的I/O,多一次磁头寻址,意味着浪费了百万条CPU指令时间
jackyjkchen
2012-10-06
打赏
举报
回复
因为写文件的瓶颈在磁盘IO,不在CPU,你并行了有毛用……
机械硬盘的悬臂寻址,你并行越多寻址次数越多,性能反而成指数级下降
viki34
2012-10-06
打赏
举报
回复
程序的主要功能是复制一个960M的文件。。利用多进程,同时读写一个文件,用pread和pwrite分段读写。
max是次数,23次,每次也就是每个进程复制40m的文件到指定位置。
但是经过测试:复制同一个文件,使用cp命令需要1min10sec多一点,只是用一个进程,缓冲设置为4096也就只比cp慢30sec左右。
用上面这个程序10min之后都没有执行完成。
我崩溃了。
请解释。。。
viki34
2012-10-06
打赏
举报
回复
python线程
进程
、异步
IO
该章节主要包括线程
进程
的概念,基于python的线程
进程
实现,GIL锁的影响,消费者生产者模型,
进程
池的应用以及
IO
模型的介绍,一句话概括本章的内容就是:实现并发编程,即计算机能够同时处理多个任务。
python
多
进程
多线程
文件
读写
效率
_
多
进程
VS 多线程:Python执行
效率
如何?
大家在学习一门计算机语言,不可避免的要考虑到运行
效率
问题,例如爬取多个网页时,是否可以利用计算机多核,实现程序并发运行,再比如内存数据交换、
文件
的
读写
、或者网络通信,总
会
出现阻塞
IO
,是否可以通过增加
进程
,将阻塞状态变成非阻塞状态。此时,多任务编程重要性就显现出来了,多任务编程就是充分利用计算机资源,同时运行多个任务,提高程序整体的运行
效率
,实现手段就是大家熟知的
多
进程
和多线程操作,也就是所谓的并...
Linux
IO
学习笔记(二)——
文件
系统
读写
文件
的流程
LInux任督二脉
IO
课程笔记,微信公众号:Linuxer。 接上篇博客,下面来说第
一个
问题,VFS是如果打开和
读写
文件
的。 用户
读写
文件
的流程 file->dentry->inode->
io
ps->address_space->disk 的流程: 通过struct找到磁盘inode节点对象:
一个
进程
打开的
文件
用struct file结构表示,这是VF...
IO
与
文件
读写
---使用Apache commons
io
包提高
读写
效率
【一】Apache commons
IO
简介 首先贴一段Apache commons
IO
官网上的介绍,来对这个著名的开源包有
一个
基本的了解: Commons
IO
is a library of utilities to assist with developing
IO
funct
io
nality. There are four main areas included:
python
多
进程
、多线程、协程与异步
io
CPU密集型 VS
IO
密集型 我们可以把任务分为计算密集型和
IO
密集型。第一种计算密集型任务的特点是要进⾏⼤量的计算,消耗CPU资源,⽐如计算圆周率、对视频进⾏⾼清解码等等,全靠CPU的运算能⼒。这种计算密集型任务虽然也可以⽤多任务完成,但是任务越多,花在任务切换的时间就越多,CPU执⾏任务的
效率
就越低,所以,要最⾼效地利⽤CPU,计算密集型任务同时进⾏的数量应当等于CPU的核⼼数。 计算密集型任务由于主要消耗CPU资源,因此,代码运⾏
效率
⾄关重要。Python这样的脚本语...
Linux/Unix社区
23,124
社区成员
74,508
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章