BIO NIO AIO-学习记录

BIO NIO AIO:

1: 传统的BIO(read + write):
总结:
2次系统调用 -》4次上下文切换 = 4次
2次DMA拷贝 + 2次CPU拷贝 = 4次 


2: BIO基础上改进的NIO

第一种方案(mmap + write):通过mmap建立用户态和内核态的内存地址映射,这样就可以减少两次内核态和用户态之间的cpu拷贝了,但是会增加一次从pageCache到Socket缓冲区的cpu拷贝。总来来说,就减少了一次cpu拷贝

总结:
两次系统调用 -》4次上下文切换 = 4次
2次DMA拷贝 + 1次cpu拷贝 = 3次


第二种方案(sendFile):使用sendFile系统调用来代替 read + write 操作。

总结:
一次系统调用 -》2次上下文切换 = 2次
2次DMA拷贝 + 1次cpu拷贝 = 3次


第三种方案(在网卡升级了的环境下改进的 sendFile):使用sendFile系统调用来代替 read + write 操作,此时在内核中数据不需要从 pageCache 中通过cpu缓存到 Socket缓冲区中,直接通过SG-DMA拷贝技术从 pageCache 中拷贝到网卡。这就是常说中的 零拷贝 技术。(这个 零 指的是 0 cpu拷贝)

总结:
一次系统调用 -》2次上下文切换 = 2次
2次DMA拷贝  = 2次

3: AIO
bio 和 nio 都使用了 pageCache 技术,使用了pageCache的IO一般就叫缓存IO、没有使用的就叫直接IO。
pageCache 技术带来两个好处:缓存最近被访问的数据、预读功能;
pageCache 的缺点:空间小,对大文件缓存不下来(而且会把其它缓存挤下去),这时就用不上 DMA 技术了。

基于上面两个问题,于是就发明了:AIO(异步IO)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值