所谓的零拷贝是指将数据直接从磁盘文件复制到网卡设备中,而不需要经由应用程序之手。零拷贝大大提高了应用程序的性能,减少了内核和用户模式之间的上下文切换。对 Linux 操作系统而言,零拷贝技术依赖于底层的 sendfile() 方法实现。对应于 Java 语言,FileChannal.transferTo() 方法的底层实现就是 sendfile() 方法。

所谓零拷贝,就是减少上下文切换,不经由用户空间,直接在内核空间把数据发往网卡接口。

操作系统底层提供的sendfile(transferTo()函数),零拷贝

sendfile
Linux2.1内核开始引入了sendfile函数,用于将文件通过socket传送。开始时跟mmap没什么区别,但是Linux2.4做出了重大优化,将零拷贝推到顶峰。

优化后的处理过程如下:

将文件拷贝到kernel buffer中;
向socket buffer中追加当前要发生的数据在kernel buffer中的位置和偏移量;
根据socket buffer中的位置和偏移量直接将kernel buffer的数据copy到网卡设备中;

Kafka速度快的原因-sendfile零拷贝介绍相关推荐

  1. Linux网络编程--sendfile零拷贝高效率发送文件

    本博文介绍使用sendfile函数进行零拷贝发送文件,实现高效数据传输,并对其进行验证. 那么什么是sendfile呢? linux系统使用man sendfile,查看sendfile原型如下: # ...

  2. 【Netty】mmap 和 sendFile 零拷贝原理

    文章目录 一. 零拷贝 简介 二. 传统 BIO 数据拷贝分析 ( 4拷贝 4切换 ) 三. mmap 内存映射 ( 3拷贝 4切换 ) 四. sendFile 函数 ( Linux 2.1 优化 ) ...

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

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

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

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

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

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

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

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

  7. 零拷贝技术在 Java 中为何这么牛?

    [CSDN 编者按]大家在学计算机的过程中是否会遇到"零拷贝"这样的字眼,本文针对这一技术为大家提供详细的概念解释,并对其产出的意义及其在Java中的应用进行说明. 责编 | 欧阳 ...

  8. Java IO篇:什么是零拷贝?

    在介绍零拷贝的IO模式之前,我们先简单了解下传统的IO模式是怎么样的? 一.传统的IO模式: 传统的IO模式,主要包括 read 和 write 过程: read:把数据从磁盘读取到内核缓冲区,再拷贝 ...

  9. 深入剖析Linux IO原理和几种零拷贝机制的实现

    本文来说下Linux IO原理和几种零拷贝机制的实现 文章目录 概述 物理内存和虚拟内存 物理内存 虚拟内存 内核空间和用户空间 内核空间 用户空间 Linux的内部层级结构 Linux I/O读写方 ...

最新文章

  1. 什么是按位移位(位移)运算符以及它们如何工作?
  2. [导入]连连看.NET 1.41全部源码
  3. java内存模型浅析_浅析java内存模型
  4. C/C++ http协议发送字段,文件,单个和多张图片
  5. json数组格式问题
  6. python外汇兑换代码_python爬取人民币汇率中间价
  7. es6 箭头函数使用_如何使用ES6箭头功能使JavaScript易于阅读
  8. ubuntu 下系统监视器_Ubuntu下,用Pyinstaller打包桌面系统时,你踩坑了没?
  9. web虚拟服务器4核32g,Web服务器配备四核的优势
  10. npm WARN stylus-loader@3.0.2 requires a peer of stylus@>=0.52.4 but none is installed. You must inst
  11. 马斯克怒删特斯拉和SpaceX脸书主页!硅谷二马恩怨再升级
  12. linux实现多台服务器文件同步
  13. 【教程向】如何用L298N电机驱动模块与Arduino实现PWM调速
  14. 时间序列分析中的增长率——同比与环比
  15. Web开发过程流程图
  16. 三菱fx3u编码器同步程序,伺服同步,一个编码器控制两个伺服同步运转
  17. 山寨凤凰新闻菜单效果
  18. SQLServer2019安装(Windows)
  19. hyper-v虚拟机的基本使用
  20. 如何用adsense赚钱_我的实操经验分享:如何通过 Adsense 赚3万美金

热门文章

  1. 《人机交互与戏剧表演:用戏剧理论构建良好用户体验》一2.3 六大元素及其之间的因果关系...
  2. MATLAB数字图像系统设计
  3. jquery ajax请求卡死,浏览器崩溃的问题
  4. E8.BPM企业流程管理系统,提升企业执行力
  5. 深度学习笔记(九)卷积神经网络算法
  6. 解读NVIDIA显卡
  7. Spring框架—IOC容器—属性赋值的几种方式
  8. data:1 Access to XMLHttpRequest at ‘https://jsonplaceholder.typicode.com/posts/‘ from origin ‘http:/
  9. 苹果套纸袋子跟塑料袋子的区别
  10. web存储(Storage)