NIO和零拷贝

NIO和零拷贝

零拷贝是指没有cpu拷贝

ps:DMA:直接内存拷贝,不经过cpu

传统IO模型

四次拷贝,三次状态的切换

mmap优化

通过内存的映射,将文件映射到内核缓冲区,且用户空间可以共享内核空间的数据,于是在进行网络传输的时候可以减少内核空间到用户空间的拷贝次数
三次拷贝,三次状态的切换

sendFile优化

数据不经过用户态,从内核缓冲区进入socketbuffer,减少一次上下文切换

Linux2.1版本

三次拷贝,两次状态的切换

Linux2.4版本

虽然有一次cpu拷贝,但是拷贝的信息很少,都是一些length、offset等信息,可以忽略不记

两次拷贝,两次状态的切换

mmap和零拷贝的区别
  1. mmap适合小数据量,sendFile适合大文件的传输

  2. mmap需要四次状态的切换,3次数据拷贝;sendFile需要三次状态切换,2次数据拷贝

  3. sendFile可以利用DMA减少CPU拷贝,mmap必须要从内核态拷贝到socketbuffer

相关推荐
Web极客码7 分钟前
Wordpress如何调整区块高度与宽度
服务器·主题·wordpress
WG_1711 分钟前
Linux:基础IO(18+19)+文件描述符
linux·运维·服务器
天机️灵韵29 分钟前
VMware Ubuntu20.04.3 LTS设置NAT模式连接
服务器
莫白媛38 分钟前
浅谈Linux部分语法(从基础操作到自动化编程的三个层次)
linux·运维·自动化
快解析43 分钟前
内网穿透快解析注册后添加配置端口教程
linux·服务器·网络
tianyuanwo1 小时前
Linux密码管理深度解析:passwd与chpasswd的底层机制对比
linux·运维·passwd·chpasswd
violet-lz1 小时前
【Linux】VMware虚拟机中的Ubuntu操作系统主文件夹扩容
linux·运维·ubuntu
HunterMichaelG1 小时前
【openSSH】Linux openEuler-22.03-x86_64升级openSSH至10.2p1版本
linux·运维·服务器
VekiSon1 小时前
Linux系统编程——IPC进程间通信
linux·运维·网络
再睡一夏就好1 小时前
深入解析Linux页表:从虚拟地址到物理内存的映射艺术
linux·运维·服务器·c语言·c++·页表·缺页异常