Kafka速度快的原因-sendfile零拷贝介绍
所谓的零拷贝是指将数据直接从磁盘文件复制到网卡设备中,而不需要经由应用程序之手。零拷贝大大提高了应用程序的性能,减少了内核和用户模式之间的上下文切换。对 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零拷贝介绍相关推荐
- Linux网络编程--sendfile零拷贝高效率发送文件
本博文介绍使用sendfile函数进行零拷贝发送文件,实现高效数据传输,并对其进行验证. 那么什么是sendfile呢? linux系统使用man sendfile,查看sendfile原型如下: # ...
- 【Netty】mmap 和 sendFile 零拷贝原理
文章目录 一. 零拷贝 简介 二. 传统 BIO 数据拷贝分析 ( 4拷贝 4切换 ) 三. mmap 内存映射 ( 3拷贝 4切换 ) 四. sendFile 函数 ( Linux 2.1 优化 ) ...
- Java 两种zero-copy零拷贝技术mmap和sendfile的介绍
详细介绍了两种zero-copy零拷贝技术mmap和sendfile的概念和基本原理. 文章目录 1 标准IO 2 零拷贝 2.1 sendfile调用 2.1 mmap调用 2.2 MQ中的应用 1 ...
- 通俗易懂的Kafka零拷贝机制
Kafka之所以那么快,其中一个很大的原因就是零拷贝(Zero-copy)技术,零拷贝不是kafka的专利,而是操作系统的升级,又比如Netty,也用到了零拷贝.下面我就画图讲解零拷贝,如果对你有帮助 ...
- Netty、Kafka中的零拷贝技术到底有多牛?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:rrd.me/ggFBd 零拷贝,从字面意思理解就是数据不需 ...
- 深入探秘 Netty、Kafka 中的零拷贝技术!
作者:ksfzhaohui 原文:juejin.im/post/5cad6f1ef265da039f0ef5df 零拷贝,从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能.我们也经常在 J ...
- 零拷贝技术在 Java 中为何这么牛?
[CSDN 编者按]大家在学计算机的过程中是否会遇到"零拷贝"这样的字眼,本文针对这一技术为大家提供详细的概念解释,并对其产出的意义及其在Java中的应用进行说明. 责编 | 欧阳 ...
- Java IO篇:什么是零拷贝?
在介绍零拷贝的IO模式之前,我们先简单了解下传统的IO模式是怎么样的? 一.传统的IO模式: 传统的IO模式,主要包括 read 和 write 过程: read:把数据从磁盘读取到内核缓冲区,再拷贝 ...
- 深入剖析Linux IO原理和几种零拷贝机制的实现
本文来说下Linux IO原理和几种零拷贝机制的实现 文章目录 概述 物理内存和虚拟内存 物理内存 虚拟内存 内核空间和用户空间 内核空间 用户空间 Linux的内部层级结构 Linux I/O读写方 ...
最新文章
- 什么是按位移位(位移)运算符以及它们如何工作?
- [导入]连连看.NET 1.41全部源码
- java内存模型浅析_浅析java内存模型
- C/C++ http协议发送字段,文件,单个和多张图片
- json数组格式问题
- python外汇兑换代码_python爬取人民币汇率中间价
- es6 箭头函数使用_如何使用ES6箭头功能使JavaScript易于阅读
- ubuntu 下系统监视器_Ubuntu下,用Pyinstaller打包桌面系统时,你踩坑了没?
- web虚拟服务器4核32g,Web服务器配备四核的优势
- npm WARN stylus-loader@3.0.2 requires a peer of stylus@>=0.52.4 but none is installed. You must inst
- 马斯克怒删特斯拉和SpaceX脸书主页!硅谷二马恩怨再升级
- linux实现多台服务器文件同步
- 【教程向】如何用L298N电机驱动模块与Arduino实现PWM调速
- 时间序列分析中的增长率——同比与环比
- Web开发过程流程图
- 三菱fx3u编码器同步程序,伺服同步,一个编码器控制两个伺服同步运转
- 山寨凤凰新闻菜单效果
- SQLServer2019安装(Windows)
- hyper-v虚拟机的基本使用
- 如何用adsense赚钱_我的实操经验分享:如何通过 Adsense 赚3万美金
热门文章
- 《人机交互与戏剧表演:用戏剧理论构建良好用户体验》一2.3 六大元素及其之间的因果关系...
- MATLAB数字图像系统设计
- jquery ajax请求卡死,浏览器崩溃的问题
- E8.BPM企业流程管理系统,提升企业执行力
- 深度学习笔记(九)卷积神经网络算法
- 解读NVIDIA显卡
- Spring框架—IOC容器—属性赋值的几种方式
- data:1 Access to XMLHttpRequest at ‘https://jsonplaceholder.typicode.com/posts/‘ from origin ‘http:/
- 苹果套纸袋子跟塑料袋子的区别
- web存储(Storage)