零拷贝

1、零拷贝是从操作系统的角度出发,因为内核缓冲区之间没有数据是重复的,只有kernel buffer一份数据
2、零拷贝不仅仅带来更少的数据复制,还能带来其他性能的优势,例如更少的上下文切换,更少的cpu缓存伪共享,以及无cpu校验和计算

DMA(direct memory Access):直接存储器访问

mmap内存映射和sendFile的区别

1、mmap适合小数据量读写,sendfile适合大文件传输
2、mmap需要4次上下文切换,3次数据拷贝;sendFile需要3次上下文切换,最少2次数据拷贝
3、sendFile可以利用DMA方式,减少CPU拷贝,mmap则不能(必须从内核拷贝到socket缓冲区)

标题代码实例记录:

// server端
package com.example.demo.nio.ZeroCopy;import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;public class NewIOSever {public static void main(String[] args) throws Exception{InetSocketAddress inetSocketAddress = new InetSocketAddress(7001);ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();ServerSocket serverSocket = serverSocketChannel.socket();//绑定端口serverSocket.bind(inetSocketAddress);//创建bufferByteBuffer byteBuffer = ByteBuffer.allocate(1024);while (true){SocketChannel socketChannel = serverSocketChannel.accept();System.out.println("进来的连接:" + socketChannel.getRemoteAddress());int readCount = 0;while (-1 != readCount){try{readCount = socketChannel.read(byteBuffer);}catch (Exception ex){break;}//进行倒带byteBuffer.rewind();//position为0,mark作废}}}}

客户端

//客户端
package com.example.demo.nio.ZeroCopy;import java.io.FileInputStream;
import java.net.InetSocketAddress;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;public class NewIOClient {public static void main(String[] args) throws Exception{SocketChannel socketChannel = SocketChannel.open();socketChannel.connect(new InetSocketAddress("127.0.0.1", 7001));String fileName = "interview.pdf";//得到一个文件channelFileChannel fileChannel = new FileInputStream(fileName).getChannel();System.out.println("socketChannel的地址:" + socketChannel.getLocalAddress());long startTime = System.currentTimeMillis();//在linux下调用transferTo方法可以完成传输,在windows下,一次只能传输8M文件//准备发送long transferCount = fileChannel.transferTo(0, fileChannel.size(), socketChannel);System.out.println("发送总字节数="+transferCount+",耗时:"+(System.currentTimeMillis()-startTime));fileChannel.close();}
}

总结:代码主要演示由netty提供的transferTo()方法可以直接进行零拷贝,与传统IO流复制文件相比确实速度提高很多
此处注意该方法调用时windows和linux系统存在差异

                                                                                                     (画个太阳激励自己) ☀

【netty学习】之零拷贝相关推荐

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

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

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

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

  3. 对于 Netty ByteBuf 的零拷贝(Zero Copy) 的理解

    根据 Wiki 对 Zero-copy 的定义: "Zero-copy" describes computer operations in which the CPU does n ...

  4. 彻底搞懂Netty高性能之零拷贝

    作为Java网络编程学习者,不仅要知道NIO,还一定要学习Mina和Netty这两个优秀的网络框架.作为上一篇NIO效率高的原理之零拷贝与直接内存映射的补充,本文将针对Netty的零拷贝特性进行详细分 ...

  5. netty如何实现零拷贝

    根据 Wiki 对 Zero-copy 的定义: "Zero-copy" describes computer operations in which the CPU does n ...

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

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

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

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

  8. netty的零拷贝、架构设计、ByteBuf扩容机制详解

    文章目录 1. netty高并发架构设计精髓 ①:主从.Reactor线程模型 ②:NIO多路复用非阻塞 ③:无锁串行化设计思想 ④:高可用.可扩展架构 ⑤:直接内存和零拷贝 ⑥:ByteBuf内存池 ...

  9. 80-15-020-原理-零拷贝-Netty零拷贝的原理

    1.概述 Netty 的零拷贝 1. 传统意义的拷贝 是在发送数据的时候,传统的实现方式是: File.read(bytes) Socket.send(bytes) 这种方式需要四次数据拷贝和四次上下 ...

  10. 关于零拷贝的一点认识

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | ksfzhaohui 来源 | https:/ ...

最新文章

  1. 2018.5.29 Oracle连接到空闲例程
  2. python基础教程学习笔记十二
  3. ipsec协议(转)
  4. EWS API 2.0读取日历信息-读取内容注意事项
  5. 查看.net frameword版本
  6. [html] html的img标签为什么要添加alt属性呢?
  7. 开始把其他的博客搬家到这里了
  8. java确认rabbitmq_RabbitMQ的消息确认模式
  9. elipse手机设备显示Target unknown或者offline解决方法
  10. 自动血压呼吸检测仪技术方案
  11. Atitit 类库冲突解决方案  httpclient-4.5.2.jar
  12. GAN造图MINST手写数字
  13. 字体和font-family对照表
  14. 游戏开发完整学习路线,都在这里了
  15. 重点| 系统集成项目管理工程师考前50个知识点
  16. 微擎支付返回商户单号_ThinkPHP6对接实现微信H5支付
  17. [Paddle2.0学习之第一步]实现波士顿房价预测
  18. python递推公式_线性代数求解递推形式数列的通项公式
  19. 流氓软件卷土重来 8749上演黑吃黑
  20. 随堂记录1--硬件-安装系统-重定向-cp-mv-rm-find-alias-显示20-30行-替换find+sed-selinux-iptables-LANG...

热门文章

  1. SVN和Git对比梳理
  2. Python后端开发效率提升工具推荐(一)
  3. 公司邮箱如何注册企业邮箱哪家安全?外贸公司邮箱哪个好?
  4. Milvus 图形化管理工具 Attu 来袭!
  5. Mac禁止Chrome自动更新【全网最新看这里~】
  6. 华为鸿蒙系统搭载机型,华为鸿蒙 2.0 首批升级机型曝光,快来看看你的机器在不在...
  7. 华为鸿蒙手机升级机型,准备好了吗?华为鸿蒙首批升级机型名单共11款,你的手机在列吗...
  8. ios 视频列表处理---分解ZFPlayer
  9. TDengine学习笔记:vnode
  10. 高级前端软件工程师知识整理之Vue技术栈篇