磁盘IO和网络IO

4、IO访问方式

4.1 磁盘IO

具体步骤:

       当应用程序调用read接口时,操作系统检查内核缓冲区中是否存在需要的数据,如果存在,就直接从内核缓存中直接返回,否则从磁盘中读取,然后缓存至操作系统的缓存中。

 

       当应用程序调用write接口时,将数据直接从用户地址空间复制到内核地址空间的缓存中,这时对用户程序来说,写操作已经完成了,至于什么时候写入磁盘中,由操作系统决定,除非显示调用sync同步命令。

 

磁盘IO流程详图:

 

4.2 网络IO

  1. 当调用系统read接口时,通过DMA(Direct Memory Access)将数据拷贝到内核缓冲区;
  2. 然后由CPU控制,将内核缓冲区的数据拷贝到用户模式的buffer中;
  3. 当调用系统write接口时,会把用户模式下buffer数据拷贝到内核缓冲区的Socket Buffer中;
  4. 最后通过DMA copy将内核模式下的socket buffer中数据拷贝到网卡设备中传输。

从上面整个read、write过程来看,数据白白从内核模式到用户模式走了一圈,浪费了两次copy,而这两次有需要CPU copy,即占用CPU资源。

 

4.3 磁盘IO与网络IO对比

       磁盘IO主要延迟是由(以15000rpm硬盘为例):机械转动延时(机械硬盘为主要性能瓶颈,平均2ms)+寻址延时*(2-3ms)+块传输延时(一般4k每块,40m/s的传输速度,延时一般为0.1ms)决定。(平均为5ms)

       网络IO主要延时是由:服务器响应延时+带宽限制+网络延时+跳转路由延时+本地接收延时 决定。(一般为几十到几千毫秒,受环境影响较大)

       所以,一般来说,网络IO延时要大于磁盘IO延时。

 

觉着老铁我写的还不错滴请继续关注下一章:Socket编程

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值