Netty核心前奏——零拷贝篇(六)

零拷贝基本介绍

  1. Java中,常用的零拷贝有mmap(内存映射),sendfile,dma,directl/O等
  2. 在操作系统中,零拷贝指的是避免在用户态 (User-space) 与内核态(Kernel-space) 之间来回拷贝数据.

OS的I/O普通读写流程

  1. 用户read发起系统调用,由用户态进入内核态,通过DMA技术将磁盘中的数据copy到内核缓冲区中
  2. 当DMA完成工作后,会发起一个中断通知CPU数据拷贝完成,然后CPU再将内核态中的数据copy到用户态中
  3. 内核唤醒对应线程,同时将用户态的数据返回给该线程空间
  4. 用户态线程进行业务处理(堆内存、堆外内存倒腾数据)
  5. 当服务器对请求进行响应的时候,会发起系统调用,由内核将用户态的数据copy到内核态中
  6. 复制完毕后,再有网络适配器通过DMA技术将内核态缓冲区中的数据copy到网卡中,完成后,内核态会返回到用户态
  7. 最后由网卡将数据发送出去

总结:在这个过程中,如果不考虑用户态的内存拷贝和物理设备到驱动的数据拷贝,我们会发现,这其中会涉及4次数据拷贝。同时也会涉及到4次进程上下文的切换。所谓的零拷贝,作用就是通过各种方式,在特殊情况下,减少数据拷贝的次数/减少CPU参与数据拷贝的次数

DMA(Direct Memory Access

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值