在实际应用中,如果我们需要把磁盘中的内容发送到远程服务器上,那么需要经过一下几个拷贝的过程。

第一个从磁盘中去读取目标文件的内容去拷贝到内核缓冲区,第二个cpu控制器把内核缓冲区的数据拷贝到用户空间的缓冲区中,第三个在应用程序中调用write()方法把用户空间缓冲区的数据拷贝到内核空间的socketBuffer中,第四个把在内核模式下的socket buffer中的数据复制到网卡缓冲区,叫NIC Buffer 最后,网卡缓冲区再把数据传输到目标服务器上,在这整个过程中,数据从磁盘最终发送出去要经历四次拷贝,这四次拷贝中有两次是可以省略的。第一,从内核空间拷贝到用户空间。第二,从用户空间再次拷贝到内核空间。除此之外,由于用户空间和内存空间的切换,会带来cpu的上下文切换,对于cpu的性能也会造成影响。

而所谓的零拷贝就是把这两次多余的拷贝忽略掉,应用程序可以直接把磁盘中的数据从内核中直接传输到Socket中去,而不需要再次经过应用程序所在的用户空间零拷贝通过DirectMemory Access技术把文件内容复制到内核空间中的ReadBuffer,接着把包含数据长度和位置信息的文件描述符加载到SocketBuffer中,DMA引擎可以直接把数据从内核空间传递到网卡设备,在这个流程中数据只经历了两次拷贝就把数据发送到了网卡当中,并且减少了两次cpu的上下文切换对于效率是有非常大的提高,所以,所谓的零拷贝并不是完全没有数据拷贝只是相对用用户空间来说,不需要再进行数据的拷贝对于前面说的整个流程来说,零拷贝只是减少了不必要的拷贝次数而已。

那么,在程序中如何实现零拷贝呢,在linux系统中,零拷贝依赖于底层sendfile()方法去实现的,而在Java中FileChannal.transferTo()方法的底层实现就是sendfile()方法除此之外还有一个叫mmap的文件映射机制,他的原理是把磁盘文件映射到内存,用户通过修改内存就可以修改磁盘文件,使用这种方式,可以获得很大的io提升,省去了用户空间到内核空间的复制开销。

kafka零拷贝总结相关推荐

  1. 通俗易懂的Kafka零拷贝机制

    Kafka之所以那么快,其中一个很大的原因就是零拷贝(Zero-copy)技术,零拷贝不是kafka的专利,而是操作系统的升级,又比如Netty,也用到了零拷贝.下面我就画图讲解零拷贝,如果对你有帮助 ...

  2. 【kafka】kafka 零拷贝 技术

    文章目录 1.概述 M.参考 1.概述 原来 8 张图,就可以搞懂「零拷贝」了 非0拷贝的样子 0拷贝的样子

  3. Java 两种zero-copy零拷贝技术mmap和sendfile的介绍

    详细介绍了两种zero-copy零拷贝技术mmap和sendfile的概念和基本原理. 文章目录 1 标准IO 2 零拷贝 2.1 sendfile调用 2.1 mmap调用 2.2 MQ中的应用 1 ...

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

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

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

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

  6. Kafka:Zero-Copy零拷贝

    1. 前言 前一段时间研究了大规模日志流高吞吐并行存储,通过深入研究Kafka的底层存储机制.我们发现Kafka的Zero-Copy零拷贝技术采用的是Java底层FileTransferTo方法,后期 ...

  7. Kafka和RocketMQ底层存储:零拷贝技术

    零拷本相关 <[转]零拷贝的实现原理> <[转]零拷贝的实现原理> <搞懂Linux零拷贝,DMA> <通过零拷贝进行有效的数据传输(java.c)> ...

  8. 深入分析零拷贝的原理,彻底掌握Netty、Kafka、RocketMQ高效率读写的秘诀

    文章目录 一.前言 二.纠正一些网络上流传的错误说法 2.1.错误说法一:零拷贝就是零复制或者零拷贝技术没有进行数据的复制操作,所以比较快. 2.2.错误说法二:DMA技术诞生后,零拷贝基于DMA,实 ...

  9. 零拷贝技术浅浅析【kafka实现百万级吞吐量基础】

    家人们,这期的知识点可能会让你掉几根头发,为了尽可能让你理解,进入正题前我们先来看个栗子 给女朋友送礼物 如果,我是说如果啊,你有一个女朋友(没有的不要灰心,认真看完文章可以找博主领取) 情人节来了, ...

最新文章

  1. Asp.net MVC生命周期
  2. springmvc 将post转换为delete,put
  3. Git的Patch功能
  4. RedOffice教你DIY环保小日历
  5. php读取客户机本地时间,PHP如何获取客户端时区以及准确显示所在地时间
  6. 用C语言实现解析简单配置文件的小工具
  7. 短视频追剧的末日来了?
  8. 根据输入时间判断年龄是否在18~68周岁之间
  9. 服务器、网站被攻击了怎么办?
  10. Android客户端通过TCP接收服务器端发送的数据
  11. 在vue中使用turn.js
  12. Cardboard -VR全景浏览
  13. 2022-2028年中国工业机器人行业产销需求预测与转型升级分析报告
  14. 两个电阻的并联与串联
  15. python三国演义人物出场统计ppt_Python统计三国演义主要人物出场次数
  16. Python爬虫问题汇总(持续更新)
  17. 多用户php商城源码,bymall B2B2C多用户开源商城系统 php版 v1.0.4
  18. 工业相机的传感器靶面大小
  19. 使用OpenCV调整图像大小
  20. 学习SpringSecurity这一篇就够了

热门文章

  1. Unix/Linux编程:exec()族函数
  2. Unity3D 对于在VR中普通摄像头和VR摄像头同时存在——分屏
  3. dede搜索结果页列表标题长度修改方法
  4. MT6735和MT6737芯片资料下载,哪个好?
  5. MySQL必知必会(3)
  6. apollo星火计划课堂笔记---(综述、V2X、Routing、Map、Planning)
  7. 教师在家长群内表扬配合家长的话术
  8. 基于支持向量机的量化选股模型
  9. jmeter录制手机脚本
  10. 厉害了,学霸利用贪心算法找偷车贼