INDEX
- §1 0 复制
- §1 0 复制演进
- §1 示例
§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