首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java-彻底弄懂netty-程序员都看懂的netty零拷贝?-知识铺

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累。不占太多时间,不停的来唤醒你记忆深处的知识点。

一、零拷贝是什么

 零拷贝指在I/O操作过程中

 a. 不消耗CPU资源来控制数据拷贝

 b. 直接在内核空间完成数据操作

二、实现零拷贝

1.从系统层面实现

    linux中使用 sendfie

2. JDK层面实现

    Java NIO中使用FileChannel.transferTo

3. Netty 实现

    Netty中对NIO FileChannel.transferTo 包装成 FileRegion

三、netty实现零拷贝

3.1  Socket 读写零拷贝实现

    使用直接内存ByteBuffer进行收发操作,避免使用JVM的堆内存进行socket收发。也就避免了一次堆内存和直接内存的拷贝动作。

 3.2  File 文件读写零拷贝实现

    使用Netty提供的FileRegion类中的 transferTo 方法,直接把文件缓冲区数据发生到目标Channel

 3.3  直接内存 ByteBuf 合并操作零拷贝实现

     使用Netty提供的CompositeByteBuf类,来合并多个ByteBuf,只是把多个ByteBuf进行逻辑上的合并,实际上没有进行内存拷贝。

     使用场景: 网络传输 报文头 和 主体 合并,进行传输动作。

 3.4  直接内存 ByteBuf 拆分操作零拷贝实现

     使用Netty提供的ByteBuf支持slice操作,从逻辑上拆分成多个ByteBuf独立的存在,实际用的还是原来的共享区。

     使用场景: 网络传输 读取报文中的 报文头和主体进行拆分。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190831A071AX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券