首先,我想介绍一下传统上零拷贝的含义,事实上,Netty中的零拷贝又有所区别,最后再介绍Netty中零拷贝的四种实现方式。
数据传输的相关概念
计算机早期的数据传输方式:
整个流程:
- CPU主动启动I/O设备;
- CPU不断询问I/O设备是否准备好;
- 若I/O设备准备好了,CPU开始从I/O设备中读数据;
- CPU将数据传输给主存。
从整个数据传输流程可以看出:CPU是一直被占用的,无法处理其他任务,性能比较差。
接口模块
早期阶段的结构中,每个部件都有单独连线,线多而且不容易扩展,称为分散连接;之后,引入了总线连接,将I/O设备连接到一条总线上,形成了公共传输通道。
这种模式下,数据传输采用了一种程序中断的方式,相当于将早期CPU不断询问I/O设备的过程去掉,流程变为:
- CPU主动启动I/O设备;
- CPU启动I/O设备后,不再询问,做其他事;
- 当I/O设备准备好了,则CPU开始从I/O设备读取数据;
- CPU