基础 | NIO - [0 复制]

§1 0 复制

通常在进行 IO 操作时,涉及到 2 种复制

  • DMA 复制
    不需要 CPU 参与,效率极高,但不可避免
  • CPU 复制
    就是 0 复制中需要消灭的复制,0 复制其实是指 0 CPU 复制

§1 0 复制演进

BIO
用户态/内核态切换:4(都完成后还有一次切换回用户态)
复制:2(DMA copy) + 2(CPU copy)

在这里插入图片描述

Memory Mapping
用户态/内核态切换:3
复制:2(DMA copy) + 1(CPU copy)
省略一次从 用户空间内核空间 的 CPU 复制
适合小文件读写
在这里插入图片描述

sendFile 函数
用户态/内核态切换:1 (存疑)
复制:2(DMA copy) + 1(CPU copy)
比 BIO 少了一次系统调用写,应该少一对线程状态切换
但有的人说这里的切换数是 2,但这里如果是 2 的话,BIO 应该是 4 否则不好理解
适合大文件读写
在这里插入图片描述

sendFile 函数优化
用户态/内核态切换:1 (存疑)
复制:2(DMA copy) + 0(CPU copy)
相对 sendFile 函数,CPU 复制只复制极少量的描述信息,可以忽略不急,即 0 复制
适合大文件读写
在这里插入图片描述

§1 示例

参考 基础 | NIO - [Channel]#复制文件,基于 transfer

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值