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

相关推荐
君之嘞13 小时前
【操作系统基础】认识操作系统:系统调用
linux·运维·microsoft
渡我白衣13 小时前
访问文件后出现的 ~$ 文件是什么?它和缓冲机制、数据丢失有什么关系?
linux
爱倒腾的老唐13 小时前
07、Linux 文件管理
linux·运维·服务器
Raymond运维14 小时前
MySQL包安装 -- RHEL系列(离线RPM包安装MySQL)
linux·运维·数据库·mysql
-dcr14 小时前
24.grep 使用手册
linux·运维开发·grep
心灵宝贝14 小时前
libopenssl1_0_0-1.0.2p-3.49.1.x86_64安装教程(RPM包手动安装步骤+依赖解决附安装包下载)
linux·运维·服务器
tryCbest14 小时前
Windows和Linux设置Https(SSL)访问
linux·windows·https
数据知道14 小时前
Go语言:数据压缩与解压详解
服务器·开发语言·网络·后端·golang·go语言
btyzadt15 小时前
Ubuntu中安装Nuclei教程
linux·运维·ubuntu
倔强的石头10615 小时前
【Linux指南】gdb进阶技巧:断点高级玩法与变量跟踪实战
linux·运维