|
前言程序员的终极追求是什么?当系统流量大增,用户体验却丝滑依旧?没错!然而,在大量文件传输、数据传递的场景中,传统的“数据搬运”却拖慢了性能。为了解决这一痛点,Linux 推出了 零拷贝 技术,让数据高效传输几乎无需 CPU 操心。今天,我就用最通俗的语言讲解零拷贝的工作原理、常见实现方式和实际应用,彻底帮你搞懂这项技术!
1、传统拷贝:数据搬运的“旧时代”为了理解零拷贝,我们先看看传统数据传输的工作方式。想象一下,我们需要把一个大文件从硬盘读取后发送到网络上。这听起来很简单,但实际上,传统的数据传输涉及多个步骤并占用大量 CPU 资源。
1.1 一个典型的文件传输过程(没有 DMA 技术):假设我们要将一个大文件从硬盘读取后发送到网络。以下是传统拷贝方式的详细步骤:读取数据到内核缓冲区:使用 read() 系统调用,数据从硬盘读取到内核缓冲区。此时,CPU 需要协调和执行相关指令来完成这一步。拷贝数据到用户缓冲区:数据从内核缓冲区被拷贝到用户空间的缓冲区。这一步由 read() 调用触发,CPU 完全负责这次数据拷贝。写入数据到内核缓冲区:通过 write() 系统调用,数据从用户缓冲区被再次拷贝回内核缓冲区。CPU 再次介入并负责数据拷贝。传输数据到网卡:最终,内核缓冲区的数据被传输到网卡,发送到网络。如果没有 DMA 技术,CPU 需要拷贝数据至网卡。[/ol]1.2 来看个图,更直观点: |
|