java解析tcp报文bytebuf_Java-彻底弄懂netty-程序员都看懂的netty零拷贝?-知识铺

原标题: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进行逻辑上的合并,实际上没有进行内存拷贝。

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

1b59d653cf4c1f1db1b7aa4ed578a8a4.png

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

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

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

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值