深入分析零拷贝的原理,彻底掌握Netty、Kafka、RocketMQ高效率读写的秘诀

本文深入探讨零拷贝技术,澄清网络上的错误理解,揭示其如何提高Netty、Kafka等框架的读写效率。通过分析操作系统、DMA和用户空间与内核空间,解释零拷贝的本质,指出其减少CPU参与和数据复制次数,提升系统性能。
摘要由CSDN通过智能技术生成

一、前言

众所周知,常见的如NIO、Netty、Kafka、RocketMQ这些框架保持高效率读写的一个原因就是使用了零拷贝技术。如果想要深入研究这些框架,就需要先掌握零拷贝的原理。

比如kafka为什么可以如此高效的读写数据,主要有如下三个原因:

  1. kafka本身是分布式集群,同时又采用了分区技术,具有较高的并发度。

  2. 数据可以顺序写入磁盘,Kafka 的 producer 生产数据,要写入到 log 文件中,写的过程是一直追加到文件末端,为顺序写。

  3. 使用了零拷贝技术。

这三个原因里,前两个比较好理解,一方面因为分布式集群模式同时又采用了分区技术,可以有很好的并发读写数据能力;另一方面在kafka官网也提供了数据表明在同样的磁盘下顺序写能到 600M/s,而随机写只有 100K/s,这 与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间

但是最后一个零拷贝技术就不是这么容易理解了,下面让我们一起追本溯源,从操作系统底层开始探究零拷贝的奥秘!

二、纠正一些网络上流传的错误说法
2.1、错误说法一:零拷贝就是零复制或者零拷贝技术没有进行数据的复制操作,所以比较快。

从拷贝这个音译词汇的翻译来看,拷贝确实就是复制的意思,但是零拷贝绝对不是零复制,零复制很容易让人以为它进行了0次复制,其实是不对的。下面让我们看下维基百科的解释:

"Zero-copy" describes computer operations in which the CPU does not perform the task of copying data from one memory area to another.

翻译过来就是说“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源,这个时候cpu可以干别的事情,至于数据的复制次数只能降低,而不会减少到0(后面会用例子说明)。

到这里第一个错误说法就更正了:零拷贝不是指0次复制而是指0次调用CPU消耗资源。

2.2、错误说法二:DMA技术诞生后,零拷贝基于DMA,实现了绝对的零复制…

首先这个观点直白来讲并没有错误,零拷贝技术确实基于DMA才能实现。但是很多文章讲零拷贝都会先讲传统的文件输入输出,然后引出DMA,最后得出类似的结论。有两个容易让人弄混的点需要强调一下:

  1. 即使是传统的read和write也会用到DMA,DMA并不神秘;
  2. 和错误说法一一样,零拷贝不是0次复制。
三、并不神秘的DMA

DMA全称是Direct Memory Access,也就是直接存储器访问。它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。通俗点理解,就是让硬件可以跳过CPU的调度,直接访问主内存

比如我们常见的磁盘控制器、显卡、网卡、声卡都是支持DMA的,可以说DMA已经彻底融入我们的计算机世界了。

评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值