netty笔记-4

零拷贝

"Zero-copy" describes computer operations in which the CPU does not perform the task of copying data from one memory area to another. This is frequently used to save CPU cycles and memory bandwidth when transmitting a file over a network.[1]

零拷贝(Zero-copy)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于通过网络传输文件时节省CPU周期和内存带宽。零拷贝技术可以减少数据拷贝和共享总线操作的次数,

消除传输数据在存储器之间不必要的中间拷贝次数,同时尽可能的减少不必要的内核态以及用户态之间的上下文切换 ,从而有效地提高数据传输效率。

linux中常用的数据传输系统调用(图片引用:https://www.jianshu.com/p/275602182f39

整个数据传输过程如图,首先通过dma将文件数据读取至内核一块缓冲区中,读取过程中发送一次数据copy

内核缓冲区的数据拷贝到用户缓冲区,发生了一次用内核态到用户态的上下文切换。

写过程中,系统调用将用户缓冲区的数据拷贝到 Socket 缓冲区。过程中又发生了一次上下文切换。

数据异步的从 Socket 缓冲区,使用 DMA 引擎拷贝到网络协议引擎

mmap

mmap原理是通过内存映射,相比拷贝数据到缓冲区,只是将文件映射到内核缓冲区,减少一次拷贝操作,在对外写数据过程中,数据直接从内核缓冲区拷贝至sokcet缓冲区,同时减少一次上下文切换

sendfile

相比mmap,sendfile再次减少的数据拷贝次数和上线文切换次数,直接从内核缓冲区进入到 Socket Buffer,由socket缓冲区通过dma同步至协议引擎

优化后sendfile

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值