放大分析双缓冲类时间计算问题

@(OS)

某OS用双缓冲传送磁盘上数据。设一次从磁盘将数据传送到缓冲区所用时间为T1,一次将缓冲区中数据传送到用户区所用时间为T2(假设T2远小于T1,T3)。CPU处理一次数据所用时间是T3,则处理该数据共重复n次,系统所用总时间是:

(n−1)×MAX(T1,T3)+T1+T2+T3.(n-1)\times MAX(T1,T3)+T1+T2+T3.

分析:对于双缓冲类问题,一次的时间是MAX(T1,T2+T3)MAX(T1,T2+T3),因为T2远小于T1,T3,所以直接踢出。得到MAX(T1,T3)MAX(T1,T3)

即,处理一次的时间是由这两者决定的,谁大谁是主要矛盾。

这种问题是可以自己动手分析理解的,不是记一个公式就跑了这么快的。

我们将问题放大,即假设T1非常非常大。那么过程就是,先经过T1(很长很长时间),终于把数据传送到了缓冲区1,在缓冲区1的同志实在等得够着急了,火速送往用户区(用时T2,tiny tiny time),CPU更着急,等了好久终于等来了数据。毫不犹豫马上处理,用时T3。然后干嘛,又开始一轮漫长的等待。。
即,把数据经过T1时间送到缓冲区1后,立马着手送数据到缓冲区2,这和缓冲区1的同学送数据到用户区同时开始的,但是T2+T3远小于T1,因此,刚送过去的数据,被它们处理完了,第二块数据还没到位。假设共n个数据,那么前面n-1个数据都是取决于何时能送到缓冲区。IO倒是不懒,不停工作,送完缓冲区1,送缓冲区2,奈何就是太慢啊。要知道磁盘IO要比CPU慢几十万到上百万倍。所以前n-1个数据中心关注在T1,T2+T3只占一小点。最后第n个数据传到了缓冲区,用时T1,经过T2送到用户区,再经过T3CPU处理完。因此最后一个数据是完整的T1+T2+T3.前面n-1个就是(n-1)T1.总时间就是 (n-1)T1 + T1+T2+T3.

再换另一种视角:T3无穷大。这个可能只是理论上存在,CPU处理一次数据再长也不太可能超过IO啊。但也不排除做的是巨复杂的运算,比如递归,不Cache的动态规划,这种坑CPU的算法下,当然T3可能大于T1。我们就假设输入的数据在CPU内进行这样巨耗时的运算,仿佛无穷大一般。第一个数据从磁盘送到缓冲区用时T1,送到用户区用时T2,CPU处理完用时T3(很长很长时间啊)。CPU处理时,IO也同步开始,经过T1送到缓冲区2,再经过T2送到用户区。但是这是一看,CPU还在努力运算中,没结束,只好等。从第二个开始到第n个,都将是前面两步快速完成,就在等CPU处理完。因此,总共用时T1+T2+T3+(n-1)T3.

对比两个数据:

  • (n-1)T1 + T1+T2+T3 (T1很大很大)
  • T1+T2+T3+(n-1)T3 (T3很大很大)

抽取出公共表达即为:

(n−1)×MAX(T1,T3)+T1+T2+T3.(n-1)\times MAX(T1,T3)+T1+T2+T3.

这种其实还蛮有思考的空间,夸张一点会更容易理解。

放大分析双缓冲类时间计算问题相关推荐

  1. 《ERP高级计划》书解读-APS案例分析之四缓冲的计算(蔡颖)(转)

    <ERP高级计划>书解读-APS案例分析之四缓冲的计算(蔡颖) http://www.amteam.org/k/Board/2004-12/0/BDDocument.asp?Action= ...

  2. android双缓冲绘图技术分析

    转载请说明出处:http://www.jianshu.com/p/efc0bebfd22e 双缓冲.多缓冲技术在计算机科学中其实是一个广义的概念,不过其本质上的意思都是差不多的.今天我们就来讲一讲双缓 ...

  3. 双缓冲(Double Buffer)原理和使用【转】

    转自:http://blog.csdn.net/acs713/article/details/16359551 原文出自:http://blog.csdn.net/xiaohui_hubei/arti ...

  4. CImage实现双缓冲最近邻插值

     一普通显示:现在的VC显示图片非常方便,远不是VC6.0那个年代的技术可比,而且支持多种格式的如JPG,PNG. CImage _img; 初始化: _img.Load(L"map.p ...

  5. 双缓冲异步日志(Async Logging)

    文章目录 一.日志系统简介 二.功能需求 三.性能需求 四.高效的异步日志 1.异步日志的概念 2.双缓冲异步日志解析 3.AsyncLogging源码 4.代码运行图示 五.双缓冲异步日志的相关问题 ...

  6. MFC---定时器和双缓冲机制绘制旋转的金刚石图案

    双缓冲原理 MFC中绘制动画的基本思路是在固定时间间隔内绘制图像,然后擦除旧图像再绘制新图像,这样连续         起来就在人类的视觉上形成动画.为了实现这种"绘制-擦除-再绘制&quo ...

  7. Double-Buffer双缓冲——游戏编程模式(下)

    Double Buffer(下) 原文:Double Buffer-Game Programming Patterns 不单单是对图形绘制 双缓冲的核心是解决了区块被访问时不能被修改的问题.这里有两个 ...

  8. 关于Surface的底层双缓冲机制学习

    双缓冲机制 问题的由来 CPU访问内存的速度要远远快于访问屏幕的速度.如果需要绘制大量复杂的图像时,每次都一个个从内存中读取图形然后绘制到屏幕就会造成多次地访问屏幕,从而导致效率很低.这就跟CPU和内 ...

  9. VC绘图中的双缓冲技术

    VC绘图中的双缓冲技术 转自:VC 绘图,使用双缓冲技术实现 ********************所有的GDI绘图函数使用的都是逻辑坐标(逻辑范围)******************* **** ...

最新文章

  1. 谷歌全新轻量级新模型ALBERT刷新三大NLP基准
  2. 提取HTML代码中文字的C#函数
  3. JavaWeb的web.xml中context-param、listener、filter、servlet加载顺序(重点)
  4. 6个免费的C++图形和游戏库
  5. 中国500多名理工科研究生被美国拒签!美国「制裁清单」影响开始深入校园!...
  6. python3元类简介(metaclass)
  7. 关于oc中自动引用计数 小结
  8. 自己做的一个简历网页,有很多bug解决不了,有没有大神帮我看看
  9. react-native ES5与ES6写法对照表
  10. C++11Mutex(互斥锁)详解
  11. 蓝图出炉:大家将能够利用英伟达技术打造自己的自动驾驶车辆
  12. Declustered RAID
  13. python 序列类型是二维元素向量,测验6: 组合数据类型 (第6周)
  14. 天天向上python题目答案_Python练习:天天向上的力量
  15. 蓝牙规范-Vol 6:低功耗控制器 Part B 链路层规范 章节1 概述
  16. 逻辑回归模型算法研究与案例分析
  17. 微信小程序----第二天(小程序 - 模板与配置)
  18. 电子表格软件能解决什么问题?
  19. 从零开始之驱动发开、linux驱动(四十、Linux common clock framework(5)_使用举例)
  20. 笔记本电脑拆机并更换固态硬盘的方法

热门文章

  1. tensoflow随笔——softmax和交叉熵
  2. 数据结构笔记(十三)-- 串的堆分配存储表示
  3. java手游+刺客_元气骑士手游教你如何成为一名顶尖流刺客
  4. java开发flex_FLEX+Java开发
  5. python拦截tcp数据包_发送低级原始tcp数据包python
  6. php 字符串转驼峰,zhouqq - PHP 蛇形命名法(snake case)和驼峰命名法(camel case) 相互转换...
  7. linux tcp 断网重连,LIS接口与串口服务器的KeepAlive的重连机制
  8. java线程main异常,‘java.lang.NoSuchMethodError:main的原因’线程中的异常“main”’...
  9. 文本文件 java_Java入门:读写文本文件
  10. python 字符串子串_Python字符串子字符串