零拷贝是一种计算机执行IO操作的优化技术,其核心目标是减少数据拷贝次数,从而提高系统性能。它主要体现在以下几个方面:

1. **定义与原理**:零拷贝字面上的意思包括“零”和“拷贝”。其中,“拷贝”是指数据从一个存储区域转移到另一个存储区域;“零”表示次数为0,即数据不需要被复制。合起来,零拷贝意味着在进行IO操作时,CPU不需要将数据从一个存储区域复制到另一个存储区域。

2. **技术实现**:零拷贝的实现主要依赖于DMA数据传输技术和内存区域映射技术。通过这两种技术,可以减少数据在内核缓冲区和用户进程缓冲区之间的反复I/O拷贝操作,从而降低CPU的负担并提高传输效率。

3. **传统模式的问题**:在传统的数据读写模式下,涉及多次空间切换和数据冗余拷贝,这不仅会增加上下文切换的次数,还会消耗大量的CPU时间。例如,当应用程序需要从磁盘读取数据并通过网卡发送给用户时,需要进行多次的数据拷贝和状态切换,导致整体效率降低。

4. **应用场景**:零拷贝技术在追求低延迟的传输场景中十分常用,特别是在文件传输、网络通信等领域有广泛的应用。

总之,零拷贝技术通过减少数据拷贝次数和上下文切换,有效地提高了系统在IO操作方面的性能。

java本身不具有io读写能力,因此read方法调用后,要从java程序员的用户态切换到内核态,去调用操作系统(kernel),将数据读入内核缓冲区,这期间用户的线程阻塞,操作系统使dma(direct menory access)来实现文件读,期间也不会使用cpu。

从内核态切换回用户态,将数据从内核缓冲区读入用户缓冲区(即byte]buf),这期间cpu会参与拷贝,无 法利用DMA

 

 

 

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: