96SEO 2026-02-20 04:37 0
在前面的文章“深浅拷贝、COW及零拷贝”中对零拷贝进行过分析但没有举例子也没有深入进行展开分析。

本文将结合实际的例程对零拷贝进行更深入的分析和说明。
也就是数据要经历从IO到内核空间再从内核到用户空间再进入内核空间然后才能通过IO发走至少要有四次的内在拷贝。
而这就引出了零拷贝的概念尽最大可能减少CPU参与数据拷贝的过程直到完全不参与拷贝。
它主要有基于内核缓冲优化的零拷贝和DirectIO的零拷贝。
仍然以上面的链路来分析可不可以直接从硬盘把数据内核缓冲区拷贝到网卡缓冲区可不可以可不可以不过用户缓冲区直接在内核内交互数据这都是直接想到的解决问题的方法和手段。
而实际上零拷贝技术也就是按这种指导思想进行开展的。
这个好理解不通过各种中间环节直接和IO打交道。
它主要应用于上层应用本身实现了磁盘的数据缓存比如常见的数据库系统软件那么就不需要再使用PageCache进行缓冲。
这样就可以减少PageCache内核缓冲区的消耗这可略过了计算中最大的中间商CPU。
而诸如下面的sendfile等其实都基于PageCache优化的零拷贝。
sendfile是Linux系统提供的系统API它可以解决用户空间和内核空间的数据拷贝的次数问题如果其和DMA技术重点指SG-DMAThe
Access共同工作即sendfileDMA那么其效率更高可以直接把数据文件从磁盘拷贝到网络缓冲区
sendfile有其一定的局限性首先是标准不统一另外一个就是无法在数据操作中间在用户空间对数据进行操作比如从磁盘加载然后加解密等然后再发送因为得不到具体的数据
sendfile和DMA的进一步效率提高此函数在内核空间和网络缓冲区间建立管道避免二者的CPU的拷贝。
注意此函数中的两个文件操作符必须有一个为管道操作符。
mmap方式大家比较熟悉这里就简单说明一下其实mmap的零拷贝就是通过内存映射提供一个内核和用户空间直接通信的手段。
mmap应用非常多最典型的是安卓的应用Framework层的数据通信很多是用mmap为实现的。
tee函数用来在两个管道文件描述符间复制数据。
它要求两个文件描述符都必须为管道描述符同时它在复制过程中保持原数据不动直接复制fd而splice是移动数据从源fd到目的fd。
注意二者的区别和不同。
下面就分别对几类技术实现方式进行举例分析。
在分析之前先对原来的文章“深浅拷贝、COW及零拷贝”中零拷贝的图进行一下完善
htons(static_castuint16_t(port));int
static_castsize_t(st.st_size));close(cSocket);}......return
注意上面的代码省略了相关的安全控制和参数赋值大家可以自行设置直接写成固定的就可以只是一个测试程序么。
splice的应用也不复杂但需要注意其中的一些要求特别是参数中在Linux2.6.21以前splice的flags设置SPLICE_F_MOVE有效其后就无效了但SPLICE_F_NONBLOCK
htons(static_castuint16_t(port));int
reinterpret_castsockaddr*(addr),
reinterpret_castsockaddr*(cSocket),
SPLICE_F_MOVE);}close(cfd);}close(sfd);return
二次调用因为第一次调用数据已经移动所以splice函数阻塞//res
在上面的分析过程中可以清晰的知道DMA技术和零拷贝既有千丝万缕的联系又有所不同
DMA技术是负责数据的直通零拷贝重点是CPU不参与数据拷贝但需要参与数据的管理比如数据可以使用开始操作等等也就是说DMA技术和零拷贝技术中的CPU互相协作达到数据拷贝的次数最少的目的。
零拷贝其实就是考虑减少从IO到用户层的整个数据流程的拷贝次数从而提高效率要始终抓住这条主线。
DMA主要是拷贝CPU重点是管理即把CPU从既管理又复制中简化工作任务只管理即可。
DMA技术和硬件关系很密切所以在具体的开发使用中要明确硬件是否支持相关具体的操作。
需要注意的另外一点是在实际场景中如果是非常大的数据文件处理基于PageCache零拷贝技术则有些力不从心了还是得使用Direct
说一些技术和概念可能理解并不深刻可以参考一下相关的一些开源框架中使用的零拷贝技术
其实说得更浅显一些所谓零拷贝更准确的说不是零次拷贝是指尽可能的减少拷贝。
在DPDK的系列文章中这种操作被发挥的淋漓尽致。
互联网的口号就是“不让中间商赚差价”这个在现实上可能有一些逻辑上的BUG但在内存操作上确实是非常用益。
当然万事万物不是说是绝对的有的时候抽象一下加一层如果能达到更好的效果又不影响实际的使用的情况下岂不更妙千头万绪又回到始终坚持的原则应用场景决定应用技术实践是检验真理的标准。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback