转:https://blog.csdn.net/zhouhao88410234/article/details/77574689?fps=1&locationNum=9

为何要懂零拷贝原理?因为rocketmq存储核心使用的就是零拷贝原理。

    1. io读写的方式
      1. 中断
      2. DMA
    2. 中断方式
      1. 中断方式的流程图如下:
        1. 用户进程发起数据读取请求
        2. 系统调度为该进程分配cpu
        3. cpu向io控制器(ide,scsi)发送io请求
        4. 用户进程等待io完成,让出cpu
        5. 系统调度cpu执行其他任务
        6. 数据写入至io控制器的缓冲寄存器
        7. 缓冲寄存器满了向cpu发出中断信号
        8. cpu读取数据至内存
      2. 缺点:中断次数取决于缓冲寄存器的大小
    3. DMA : 直接内存存取
      1. DMA方式的流程图如下:
        1. 用户进程发起数据读取请求
        2. 系统调度为该进程分配cpu
        3. cpu向DMA发送io请求
        4. 用户进程等待io完成,让出cpu
        5. 系统调度cpu执行其他任务
        6. 数据写入至io控制器的缓冲寄存器
        7. DMA不断获取缓冲寄存器中的数据(需要cpu时钟)
        8. 传输至内存(需要cpu时钟)
        9. 所需的全部数据获取完毕后向cpu发出中断信号
      2. 优点:减少cpu中断次数,不用cpu拷贝数据
    4. 数据拷贝
      1. 下面展示了 传统方式读取数据后并通过网络发送 所发生的数据拷贝:
        1. 一个read系统调用后,DMA执行了一次数据拷贝,从磁盘到内核空间
        2. read结束后,发生第二次数据拷贝,由cpu将数据从内核空间拷贝至用户空间
        3. send系统调用,cpu发生第三次数据拷贝,由cpu将数据从用户空间拷贝至内核空间(socket缓冲区)
        4. send系统调用结束后,DMA执行第四次数据拷贝,将数据从内核拷贝至协议引擎
        5. 另外,这四个过程中,每个过程都发生一次上下文切换
      2. 内存缓冲数据,主要是为了提高性能,内核可以预读部分数据,当所需数据小于内存缓冲区大小时,将极大的提高性能。
      3. 零拷贝是为了消除这个过程中冗余的拷贝
    5. 零拷贝-sendfile 对应到java中
      为FileChannel.transferTo(long position, long count, WritableByteChannel target)//将数据从文件通道传输到了给定的可写字节通道
      1. 避免了第2,3步的数据拷贝,参考下图:
        1. DMA从拷贝至内核缓冲区
        2. cpu将数据从内核缓冲区拷贝至内核空间(socket缓冲区)
        3. DMA将数据从内核拷贝至协议引擎
        4. 这三个过程中共发生2次上下文切换,分别为发起读取文件和发送数据
      2. 以上过程发生了三次数据拷贝,其中有一次为cpu完成
      3. linux内核2.4以后,socket缓冲区做了调整,DMA带收集功能,如下图:
        1. DMA从拷贝至内核缓冲区
        2. 将数据的位置和长度的信息的描述符增加至内核空间(socket缓冲区)
        3. DMA将数据从内核拷贝至协议引擎
          所谓零拷贝,指的是应用内存与内核内存不存在拷贝。
          对应零拷贝技术有mmap及sendfile

java的零拷贝机制的更多相关文章

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

    深入剖析Linux IO原理和几种零拷贝机制的实现 来源 https://zhuanlan.zhihu.com/p/83398714 零壹技术栈      公众号[零壹技术栈] 前言 零拷贝(Zero ...

  2. 框架篇:Linux零拷贝机制和FileChannel

    前言 大白话解释,零拷贝就是没有把数据从一个存储区域拷贝到另一个存储区域.但是没有数据的复制,怎么可能实现数据的传输呢?其实我们在java NIO.netty.kafka遇到的零拷贝,并不是不复制数据 ...

  3. Netty源码解析 -- 零拷贝机制与ByteBuf

    本文来分享Netty中的零拷贝机制以及内存缓冲区ByteBuf的实现. 源码分析基于Netty 4.1.52 Netty中的零拷贝 Netty中零拷贝机制主要有以下几种 1.文件传输类DefaultF ...

  4. Java基础-零拷贝技术应用案例

    Java基础-零拷贝技术应用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 零拷贝技术在Hadoop生态圈中很多组件得到应用,典型的比如kafka组件,它就很成功的应用了零拷贝 ...

  5. Java后端进阶-网络编程(Netty零拷贝机制)

    package com.study.hc.net.netty.demo; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled ...

  6. NIO学习笔记,从Linux IO演化模型到Netty—— Java NIO零拷贝

    同样只是大致上的认识. 其中,当使用transferFrom,transferTo的时候用的sendfile(). 如果系统内核不支持 sendfile,进一步执行 transferToTrusted ...

  7. kafka零拷贝机制

    kafka之所以那么快,其中一个很大的原因就是零拷贝(Zero-copy)技术,零拷贝不会kafka的专利,而是操作系统的升级,又比如Netty,也用到了零拷贝. 传统IO kafka的数据是要落入磁 ...

  8. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

  9. 【Java】Java中的零拷贝

    物理内存 计算机物理内存条的容量,比如我们买电脑会关注内存大小有多少G,这个容量就是计算机的物理内存. 虚拟内存 操作系统为每个进程分配了独立的虚拟地址空间,也就是虚拟内存,虚拟地址空间又分为用户空间 ...

随机推荐

  1. Hbase和Oracle的对比

    转自:http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html 转自:http://blog.csdn.net/allen879/ ...

  2. cuda培训素材

    http://www.geforce.cn/hardware/desktop-gpus/geforce-gtx-480/architecture http://cache.baiducontent.c ...

  3. 包装类接受string 会自动将数字类型string转换成对应得包装类型

  4. Nginx websocket反向代理

    L:106 现在主流的反向代理,通过长链接可以从服务器推送数据到页面 升级成websocket反向代理必须根据上面的配置做配置 缺点无法多路复用,也就是没办法并行 我们测试下Websocket反向代理 ...

  5. 了解AutoCAD对象层次结构 —— 6 ——块表记录

    块表记录是包裹实体对象的最后一层包装了,接下来让我们继续利用MgdDbg工具查看上一小节创建的块定义内的对象有哪些. 操作步骤如下:选择块表记录TestBlock,在右侧列表中找到“Entities ...

  6. git在Linux下的安装

    参考:https://git-scm.com/book/zh/v1/%E8%B5%B7%E6%AD%A5-%E5%AE%89%E8%A3%85-Git Git 的工作需要调用 curl,zlib,op ...

  7. Android中HttpURLConnection对象是怎么生成的

    try { URL mUrl = new URL("https://www.jianshu.com/"); HttpURLConnection http = (HttpURLCon ...

  8. Codeforces 888G(分治+trie)

    按位贪心,以当前考虑位是0还是1将数分成两部分,则MST中这两部分之间只会存在一条边,因为一旦有两条或以上的边,考虑两条边在原图中所成的环,显然这两条边有一条是环上的权值最大边,不会出现在MST中.则 ...

  9. [USACO12MAR] 花盆Flowerpot

    类型:二分+单调队列 传送门:>Here< 题意:给出$N$个点的坐标,要求根据$x$轴选定一段区间$[L,R]$,使得其中的点的最大与最小的$y$值之差$\geq D$.求$Min\{R ...

  10. Codeforces191 C. Fools and Roads

    传送门:>Here< 题意:给出一颗树,和K次操作.每次操作给出a,b,代表从a到b的路径上所有边的权值都+1(边权最开始全部为0).最后依次输出每条边最终的权值 解题思路: 由于n非常大 ...