零拷贝知识整理

什么是零拷贝

是一种数据传输技术,通过减少CPU和内存之间的数据复制次数来提高数据传输的效率和性能。利用到了PageCache技术

为什么需要零拷贝

在传统方式下,数据的传输方式通常会从磁盘或网络缓冲中读取到内存,再从内存复制到磁盘或网络缓存中。在此期间,会造成大量的CPU开销。
为了避免这些问题,操作系统通过DMA(直接内存访问)功能,可以将数据直接从磁盘或网络缓存传输到对应的磁盘控制器或网卡设备上,避免较频繁的上下文切换和数据复制。

如何实现零拷贝

  • mmap + write
  • sendfile
mmap + write:

通过虚拟内存将内核空间和用户空间的虚拟地址映射到同一个物理地址,从而减少数据拷贝次数
在这里插入图片描述

sendfile

直接在内核中实现数据的拷贝操作,减少了CPU上下文切换的次数
在这里插入图片描述

sendfile+DMA scatter/gather 实现的零拷贝

直接把内核缓冲区(PageCache)的数据读取到网卡中!
在这里插入图片描述
ps: 零拷贝不适合大文件的传输,使用异步I/O和直接I/O传输!

Java NIO和Netty提供的方法

  • slice:对ByteBuf进行切割,但没有发送内存复制

  • 在这里插入图片描述

  • duplicate:截取ByteBuf所有内容,共用同一块物理内存
    在这里插入图片描述

  • CompositeByteBuf:将多个ByteBuf逻辑组成为一个ByteBuf,不发生内存拷贝

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值