二、纠正一些网络上流传的错误说法
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,最后得出类似的结论。有两个容易让人弄混的点需要强调一下:
即使是传统的read和write也会用到DMA,DMA并不神秘;
和错误说法一一样,零拷贝不是0次复制。
三、并不神秘的DMA
DMA全称是Direct Memory Access,也就是直接存储器访问。它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。通俗点理解,就是让硬件可以跳过CPU的调度,直接访问主内存。
比如我们常见的磁盘控制器、显卡、网卡、声卡都是支持DMA的,可以说DMA已经彻底融入我们的计算机世界了。
从零拷贝技术的角度来看,DMA的知识我们了解这么多就足够了,不需要关心它内部是怎么处理和实现的。