1. 传统IO

由上面图知,传统io需要经过4次copy, 3次状态切换

第一次: 从硬盘 经过 DMA 拷贝 到 kernel buffer (内核buferr)

第二次: 从kernel buffer 经过cpu 拷贝到 user buffer ,比如拷贝到应用程序

第三次: 从user buffer 拷贝到 socket buffer

第四次: 从socket buffer 拷贝到 protocol engine 协议栈

第一次状态切换: 用户态---》 内核状 (或者叫着 用户上下文----》 内核上下文)

第二次状态切换: 内核状---》 用户状

第三次状态切换: 用户状---》 内核状

DMA : direct memory access  直接内存拷贝

2. mmap优化

mmap : 通过内存映射 ,将文件映射到内核缓冲区,同时用户空间可以共享内核空间的数据。这样在网络传输时就减少了内核空间到用户空间的拷贝次数

第一次拷贝: DMA拷贝,从硬件拷贝到内核空间

因为user buffer 与kernel buffer共享数据 ,所以不需要将数据从kernel buffer 拷贝到 user buffer , 数据可以直接在内核空间修改

第二次拷贝: kernel buffer 中的数据经过 cpu 拷贝到 socket buffer

第三次拷贝: socket buffer 过DMA拷贝到protocol engine

所以 mmp优化之后,拷贝共需要3次, 但是状态 切换还是3次

3. sendFile优化

Linux2.4 提供的sendFile实现了真正的零拷贝

第一次拷贝: DMA拷贝,将数据从硬盘拷贝到kernel buffer

第二次拷贝: DMA拷贝,将数据从kernel buffer拷贝到protocol engine

没有经过cpu拷贝,也就是操作系统级别的拷贝,实现了真正的零拷贝

注意: sendFile技术还是有少量的数据(例如数据的大小,偏移量等)使用了cpu拷贝,从kernel buffer 拷贝到 socket buffer ,但是数据量很少,可忽略

传统IO拷贝与零拷贝技术比较的更多相关文章

  1. 【Netty技术专题】「原理分析系列」Netty强大特性之ByteBuf零拷贝技术原理分析

    零拷贝Zero-Copy 我们先来看下它的定义: "Zero-copy" describes computer operations in which the CPU does n ...

  2. Linux 中的零拷贝技术,第 1 部分

    概述 本系列由两篇文章组成,介绍了当前用于 Linux 操作系统上的几种零拷贝技术,简单描述了各种零拷贝技术的实现,以及它们的特点和适用场景.本文是本系列文章的第一部分,主要是介绍一些零拷贝技术的相关 ...

  3. [转帖]Linux 中的零拷贝技术,第 1 部分

    Linux 中的零拷贝技术,第 1 部分 https://www.ibm.com/developerworks/cn/linux/l-cn-zerocopy1/index.html   引言 传统的 ...

  4. 零拷贝-zero copy

    Efficient data transfer through zero copy Zero Copy I: User-Mode Perspective 0. 前言 在阅读RocketMQ的官方文档时 ...

  5. Netty 零拷贝(一)Linux 零拷贝

    Netty 零拷贝(一)Linux 零拷贝 本文探讨 Linux 中主要的几种零拷贝技术以及零拷贝技术适用的场景. 一.几个重要的概念 1.1 用户空间与内核空间 操作系统的核心是内核,独立于普通的应 ...

  6. Linux、JDK、Netty中的NIO与零拷贝

    一.先理解内核空间与用户空间 Linux 按照特权等级,把进程的运行空间分为内核空间和用户空间,分别对应着下图中, CPU 特权等级分为4个,Linux 使用 Ring 0 和 Ring 3. 内核空 ...

  7. sendfile函数--零拷贝(转)

    零拷贝:零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除通信数据在存储器之间不必要的中间拷贝过程,有效地提高通信效率,是设计高速接口通道.实现高速服务器和路由器的关键技术之一. sendfile ...

  8. Netty 零拷贝(三)Netty 对零拷贝的改进

    Netty 零拷贝(三)Netty 对零拷贝的改进 Netty 系列目录 (https://www.cnblogs.com/binarylei/p/10117436.html) Netty 的&quo ...

  9. Linux下的零拷贝

    Reference:  https://segmentfault.com/a/1190000011989008 零拷贝是什么? 维基百科对“零拷贝”是这样描述的: "Zero-copy&qu ...

随机推荐

  1. iptables中文帮助

    Iptables(8)                                                                                          ...

  2. 腾讯重磅开源分布式NoSQL存储系统DCache

    当你在电商平台秒杀商品或者在社交网络刷热门话题的时候,可以很明显感受到当前网络数据流量的恐怖,几十万商品刚开抢,一秒都不到就售罄:哪个大明星出轨的消息一出现,瞬间阅读与转发次数可以达到上亿.作为终端用 ...

  3. 【minicap】基于图像识别的手机端UI自动化测试的截图方式更新

    minicap属于STF框架的一个工具,可以高速截图.同步手机屏幕至浏览器等   为什么用minicap截图: 经过试验,截同一个屏幕的一张图,adb shell screencap速度为2.9秒,而 ...

  4. HDU-4081.Qinshihuang'sNationalRoadSystem(次小生成树变种)

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

  5. User-Agent结构介绍及主流浏览器User-Agent大全

    User-Agent结构介绍及主流浏览器User-Agent大全:https://blog.csdn.net/qianxing111/article/details/79415857 一.基础知识篇: ...

  6. linux安装curl出错

    今天配置一台server的php支持curl的时候, 出现如下报错 checking for cURL in default path... not foundconfigure: error: Pl ...

  7. Redis: 分布式锁的正确实现方式(转)

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...

  8. 判断当前终端是手机还是pc端并进行不同的页面跳转

    判断当前设备(终端)是手机还是pc端并进行不同的页面跳转 DEMO 1 <script type="text/javascript"> function browser ...

  9. SQL结构化查询语言

    一.SQL 结构化查询语言 1.T-SQL 和 SQL的关系 T-SQL是SQL的增强版 2.SQL的组成 2.1 DML (数据操作语言) 增加,修改,删除等数据操作 2.2 DCL (数据控制语言 ...

  10. 2019-8-31-dotnet-core-集成到-Mattermost-聊天工具

    title author date CreateTime categories dotnet core 集成到 Mattermost 聊天工具 lindexi 2019-08-31 16:55:58 ...