1、我们说零拷贝,是从操作系统的角度来说的。因为内核缓冲区之间,没有数据是

重复的(只有 kernel buffer 有一份数据)。

2、零拷贝不仅仅带来更少的数据复制,还能带来其他的性能优势,例如更少的上下

文切换,更少的 CPU 缓存伪共享以及无 CPU 校验和计算。

(DMA--Direct memory access-直接内存拷贝)

①传统的io流是需要经历这样的过程:

用户态--DMA拷贝--内核态--CPU拷贝--用户Buffer--CPU拷贝--SocketBuffer--DMA拷贝--协议栈

经历了4次拷贝,4次状态切换

②后面出现了mmap:

mmap 通过内存映射,将文件映射到内核缓冲区,同时,用户空间可以共享内核

空间的数据。这样,在进行网络传输时,就可以减少内核空间到用户控件的拷贝

次数

用户态--DMA拷贝--内核态--改成直接读取--用户Buffer--CPU拷贝--SocketBuffer--DMA拷贝--协议栈

经历了3次拷贝,4次状态切换,但是还是有cpu拷贝

③Linux 2.1 版本 提供了sendFile 函数,其基本原理如下:数据根本不经过用户态,直接从内核缓冲区进入到 SocketBuffer,同时,由于和用户态完全无关,就减少了一次上下文切换

用户态--DMA拷贝--内核态--CPU拷贝--SocketBuffer--DMA拷贝--协议栈

经历了3次拷贝,3次状态切换,这里的CPU拷贝是极少的,就一些length,Offset的状态拷贝,接近于零拷贝了。

Linux 在 2.4 版本中,做了一些修改,避免了从内核缓冲区拷贝到 Sockebuffer 的操作,直接拷贝到协议栈,从而再一次减少了数据拷贝。

用户态--DMA拷贝--内核态--CPU拷贝--DMA拷贝--协议栈

经历了3次拷贝,2次状态切换,这里的CPU拷贝是极少的,就一些length,Offset的状态拷贝,接近于零拷贝了。

这里总结一下mmap和sendFile的区别:

1) mmap 适合小数据量读写,sendFile 适合大文件传输。

2) mmap 需要 4 次上下文切换,3 次数据拷贝;sendFile 需要 3 次上下文切换,最

少 2 次数据拷贝。

3) sendFile 可以利用 DMA 方式,减少 CPU 拷贝,mmap 则不能(必须从内核拷贝

到 Socket 缓冲区)。

下面就来讲讲如何使用nio的transferto来实现零拷贝:

用户--DMA---channel----DMA---对方文件

linux中,使用transferto可以完成整个文件的传输,但是在window中,transferto一次只能发送8m的文件,就需要分片传输,注意传输起点(8*1024*1024)

NIO中的零拷贝--transferTo相关推荐

  1. 操作系统中的零拷贝与java中的使用

    下面是在Linux操作系统中将磁盘中的数据传输到网络设备上的示例图. 在图中可以看到数据先从磁盘上读取到用户空间而后再从用户空间写入到网络设备中,写入和读取一共经历四次拷贝,和四次状态的切换(用户到内 ...

  2. 浅析操作系统和Netty中的零拷贝机制

    点击关注公众号,Java干货及时送达 零拷贝机制(Zero-Copy)是在操作数据时不需要将数据从一块内存区域复制到另一块内存区域的技术,这样就避免了内存的拷贝,使得可以提高CPU的.零拷贝机制是一种 ...

  3. Netty、Kafka中的零拷贝技术到底有多牛?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:rrd.me/ggFBd 零拷贝,从字面意思理解就是数据不需 ...

  4. 深入探秘 Netty、Kafka 中的零拷贝技术!

    作者:ksfzhaohui 原文:juejin.im/post/5cad6f1ef265da039f0ef5df 零拷贝,从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能.我们也经常在 J ...

  5. 理解Netty中的零拷贝(Zero-Copy)机制

    理解Netty中的零拷贝(Zero-Copy)机制 发表于2年前(2014-01-13 15:11)   阅读(10209) | 评论(12) 164人收藏此文章,我要收藏 赞29 12月12日北京O ...

  6. linux 占用缓存前10_Linux 中的零拷贝技术

    什么是拷贝 要知道零拷贝,需要先知道什么是拷贝.其实这个"拷贝"来自于 Linux 中的标准 I/O 接口的基本数据拷贝的操作,而这一操作会导致数据在操作系统内核地址空间的缓冲区和 ...

  7. Linux 中的零拷贝技术,第 2 部分

    技术实现 本系列由两篇文章组成,介绍了当前用于 Linux 操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景.第一部分主要介绍了一些零拷贝技术的相关背景知识,简要概 ...

  8. java中的io复用_从 Java 中的零拷贝到五种IO模型

    在之前的文章中,我们聊过了 Java 中的零拷贝,零拷贝就是指数据不会在内核空间和用户空间之间相互拷贝.这样就减少了内核态与用户态的切换,自然就很高效. 拷贝文件只是 IO 操作中一个特殊的情况,大多 ...

  9. Linux 中的零拷贝技术

    引言 传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输.这样做最大的好处是可以减 ...

最新文章

  1. python *args 元组 **kargs 字典
  2. python开发环境搭建---pyenv安装python3.5.2
  3. Coursera吴恩达《序列模型》课程笔记(2)-- NLP Word Embeddings
  4. 汇编语言(十一)之统计非数字字符个数
  5. 趣图:当我捕获Bug的时候
  6. Mac下升级python2.7到python3.6,删除2.7,或者不删除2.7都行
  7. python调用TensorFlow时报错:FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated
  8. 武汉.NET俱乐部12月活动图片及课件下载
  9. NIO - Buffer
  10. Ubuntu 网络配置
  11. 小米蓝牙音箱驱动_新品频发,小米 Air2 SE真无线蓝牙耳机即将开售
  12. 方方格子补丁_方方格子wps版下载 方方格子Excel工具箱插件(WPS版全套) v3.2.8.0 中文官方安装版 下载-脚本之家...
  13. 前沿重器[25] | 聊聊对话系统:多轮对话
  14. 甘肃政企云计算机服务平台,西北政企云计算服务中心
  15. 小米html查看器 联网,小米摄像机如何连接无线路由器通过手机查看
  16. 谈谈基于模型的设计(Model-Based Design)
  17. HTCVIVE无线套装安装后unityvr项目无法在头盔中显示
  18. 企业邮箱哪家最优惠?企业邮箱最优惠价格来了
  19. sql server 使用drop column 列名 删除列时报错,由于一个或多个对象访问此 列,ALTER TABLE DROP COLUMN stu_cou_num 失败
  20. 江民KV2008离线包和安装包下载 2007-12-24

热门文章

  1. 运筹说 第1期|运筹学知识体系
  2. 江西理工大学网络安全思考题
  3. 苹果服务器维护不能刷机,苹果服务器宕机!不要贸然刷机,等待即可
  4. 基于Python Tkiner、thread与socket实现的简单多人聊天室,在Python中创建TCP服务器与客户端进行通信
  5. C#双行计算器和单行计算器
  6. Oracle补丁介绍
  7. 父母必看(现代教育与私塾教育的面面观)
  8. 【医学+深度论文:F14】2018 Joint Optic Disc and Cup Segmentation Based on Multi Label Deep Network
  9. MoveBase源码阅读笔记
  10. erp二次开发与java web_什么是erp系统的二次开发?