基础 | 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

posted @ 2025-05-20 14:56  问仙长何方蓬莱  阅读(8)  评论(0)    收藏  举报