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

相关推荐
寂柒10 分钟前
Linux——基础IO
linux
杨云龙UP22 分钟前
Oracle ASM磁盘组空间分配与冗余理解
linux·运维·数据库·sql·oracle
朽棘不雕34 分钟前
Linux权限
linux
minji...1 小时前
Linux 库制作与原理(三)深入动静态链接原理
linux·运维·服务器·c++
bukeyiwanshui1 小时前
Linux实践
linux·运维·服务器
ChoSeitaku1 小时前
NO.2|proto3语法|消息类型|通讯录|文件读取|enum类型
java·服务器·前端
xlp666hub1 小时前
【Linux驱动实战】:字符设备之ioctl与mutex全解析
linux·面试
守望时空332 小时前
使用NetworkManager替换当前网络管理器
linux·运维
MinterFusion2 小时前
如何在开放麒麟(openKylin)下安装FTP服务器(v0.1.0)
运维·服务器·网络·vsftpd·开放麒麟·明德融创·openkylin
爱网安的monkey brother2 小时前
Linux自用文档
linux