当前位置:首页 > 科技  > 软件

字节面试:说说零拷贝技术实现原理?

来源: 责编: 时间:2024-06-24 09:13:44 302观看
导读零拷贝(Zero-copy)技术是一种计算机操作系统中用于提高数据传输效率的优化策略。在传统的数据传输过程中,需要将数据从一个缓冲区拷贝到另一个缓冲区,然后再传输给目标。这涉及到多次的 CPU 和内存之间的数据拷贝操作,会消

t0F28资讯网——每日最新资讯28at.com

零拷贝(Zero-copy)技术是一种计算机操作系统中用于提高数据传输效率的优化策略。在传统的数据传输过程中,需要将数据从一个缓冲区拷贝到另一个缓冲区,然后再传输给目标。这涉及到多次的 CPU 和内存之间的数据拷贝操作,会消耗 CPU 的时间和内存带宽。而零拷贝技术通过直接共享数据的内存地址,避免了中间的拷贝过程,从而提高了数据传输的效率。t0F28资讯网——每日最新资讯28at.com

1.传统 IO 执行流程

要搞明白零拷贝技术就要先搞清楚传统 IO 的执行流程,传统的 IO 的执行流程如下:t0F28资讯网——每日最新资讯28at.com

t0F28资讯网——每日最新资讯28at.com

(1)用户态和内核态

操作系统有用户态和内核态之分,这是因为计算机体系结构中的操作系统设计了两个不同的执行环境,以提供不同的功能和特权级别。t0F28资讯网——每日最新资讯28at.com

  • 用户态(User Mode)是指应用程序运行时的执行环境。在用户态下,应用程序只能访问受限资源,如应用程序自身的内存空间、CPU 寄存器等,并且不能直接访问操作系统的底层资源和硬件设备。
  • 内核态(Kernel Mode)是指操作系统内核运行时的执行环境。在内核态下,操作系统具有更高的权限,可以直接访问系统的硬件和底层资源,如 CPU、内存、设备驱动程序等。

(2)DMA

DMA(Direct Memory Access,直接内存访问)技术,绕过 CPU,直接在内存和外设之间进行数据传输。这样可以减少 CPU 的参与,提高数据传输的效率。t0F28资讯网——每日最新资讯28at.com

2.零拷贝技术的实现

零拷贝技术可以利用 Linux 下的 MMap、sendFile 等手段来实现,使得数据能够直接从磁盘映射到内核缓冲区,然后通过 DMA 传输到网卡缓存,整个过程中 CPU 只负责管理和调度,而无需执行实际的数据复制指令。t0F28资讯网——每日最新资讯28at.com

(1)MMap

MMap(Memory Map)是 Linux 操作系统中提供的一种将文件映射到进程地址空间的一种机制,通过 MMap 进程可以像访问内存一样访问文件,而无需显式的复制操作。t0F28资讯网——每日最新资讯28at.com

使用 MMap 可以把 IO 执行流程优化成以下执行步骤:t0F28资讯网——每日最新资讯28at.com

t0F28资讯网——每日最新资讯28at.com

传统的 IO 需要四次拷贝和四次上下文(用户态和内核态)切换,而 MMap 只需要三次拷贝和四次上下文切换,从而能够提升程序整体的执行效率,并且节省了程序的内存空间。t0F28资讯网——每日最新资讯28at.com

(2)senFile 方法

在 Linux 操作系统中 sendFile() 是一个系统调用函数,用于高效地将文件数据从内核空间直接传输到网络套接字(Socket)上,从而实现零拷贝技术。这个函数的主要目的是减少 CPU 上下文切换以及内存复制操作,提高文件传输性能。t0F28资讯网——每日最新资讯28at.com

使用 sendFile() 可以把 IO 执行流程优化成以下执行步骤:t0F28资讯网——每日最新资讯28at.com

t0F28资讯网——每日最新资讯28at.com

3.哪些地方用到了零拷贝技术?

在 Java 中,以下几个地方使用了零拷贝技术:t0F28资讯网——每日最新资讯28at.com

  • NIO(New I/O)通道:java.nio.channels.FileChannel 提供了 transferTo() 和 transferFrom() 方法,可以直接将数据从一个通道传输到另一个通道,例如从文件通道直接传输到 Socket 通道,整个过程无需将数据复制到用户空间缓冲区,从而实现了零拷贝。
  • Socket Direct Buffer:在 JDK 1.4 及更高版本中,Java NIO 支持使用直接缓冲区(DirectBuffer),这类缓冲区是在系统堆外分配的,可以直接由网卡硬件进行 DMA 操作,减少数据在用户态与内核态之间复制次数 ,提高网络数据发送效率。
  • Apache Kafka 或者 Netty 等高性能框架:这些框架在底层实现上通常会利用 Java NIO 的上述特性来优化数据传输,如 Kafka 生产者和消费者在传输消息时会用到零拷贝技术以提升性能。

小结

使用零拷贝技术可以减少 CPU 拷贝,及减少了上下文的切换带来的性能开销,提高了程序的整体执行效率,它们的区别对比如下表格所示:t0F28资讯网——每日最新资讯28at.com


t0F28资讯网——每日最新资讯28at.com

CPU 拷贝/次数t0F28资讯网——每日最新资讯28at.com

DMA 拷贝/次数t0F28资讯网——每日最新资讯28at.com

上下文切换/次数t0F28资讯网——每日最新资讯28at.com

传统 IOt0F28资讯网——每日最新资讯28at.com

2
t0F28资讯网——每日最新资讯28at.com

2
t0F28资讯网——每日最新资讯28at.com

4
t0F28资讯网——每日最新资讯28at.com

MMapt0F28资讯网——每日最新资讯28at.com

1
t0F28资讯网——每日最新资讯28at.com

2
t0F28资讯网——每日最新资讯28at.com

4
t0F28资讯网——每日最新资讯28at.com

sendFile()t0F28资讯网——每日最新资讯28at.com

1
t0F28资讯网——每日最新资讯28at.com

2
t0F28资讯网——每日最新资讯28at.com

2
t0F28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-95920-0.html字节面试:说说零拷贝技术实现原理?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 程序的“通用性”和“过度设计”困境

下一篇: 20 个 Python 字典映射技巧,让数据处理更高效

标签:
  • 热门焦点
  • 企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的“征求意见版”:1、取消P序列
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元“人在职场,应该选择什么样的着装?”近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    7月29日消息,根据市场调查机构Counterpoint Research公布的最新报告,2023年第2季度中国智能手机销量同比下降4%,创新自2014年以来第2季度销量新低。报
  • 机构称Q2全球智能手机出货量同比下滑11% 苹果份额依旧第2

    7月20日消息,据外媒报道,研究机构的报告显示,由于需求下滑,今年二季度全球智能手机的出货量,同比下滑了11%,三星、苹果等主要厂商的销量,较去年同期均有下
  • 外交部:美方应停止在网络安全问题上不负责任地指责他国

      中国外交部今天(16日)举行例行记者会。会上,有记者问,美国情报官员称,他们正在阻拦来自中国以及其他国家的黑客获取相关科研成果。 中方对此有何评论?对此
Top