零拷贝了解吗

什么是零拷贝

零拷贝(Zero-Copy)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于网络传输文件时节省CPU周期和内存带宽。

  • 零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率。
  • 零拷贝技术减少了用户进程空间和内核空间之间因为上下文切换带来的开销。
    注意:没有说不需要拷贝,只是减少冗余(不必要)的拷贝。

Java支持哪些零拷贝

NIO提供的内存映射MappedByteBuffer
首先要说明的是,JavaNIO中的Channel就相当于操作系统中的内核缓冲区,有可能是读缓冲区,也有可能是网络缓冲区,而Buffer就相当于操作系统中的用户缓冲区。

NIO提供的sendfile

  • FileChannel.transferTo()方法直接将通道内容传输到另一个通道,没有涉及Buffer的任何操作,NIO的Buffer是JVM堆或堆外内存,但不论如何他们都是操作系统内核空间内存。
  • transferTo()的实现方式就是通过系统调用sendfile()

Kafka中的零拷贝

Kafka两个重要过程都使用了零拷贝技术,且都是操作系统层面的狭义零拷贝,一是Producer生产者存到broker,二是Consumer从broker读取数据。

  • Producer生产的数据持久化到broker,采用mmap文件映射,实现顺序的快速写入。
  • Consumer从broker读取数据,采用sendfile,将磁盘文件读取OS内核缓冲区后,直接转到socket buffer进行网络发送。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值