天天看点

我所认识的软件开发原则:减少等待时间

[size=medium] 在系统或设备交互时,因处理效率不一致,经常会导致等待的发生。最初这种矛盾在计算机内部尤为突出。高速CPU与低速外部设备之间数据处理的频率差异,使CPU在绝大部分的时间周期内不做任何事情。计算机专家不能允许这种无谓浪费,异步处理模型被引入。

其实在与计算机相关的域模型中,频繁等待的不至CPU。使用计算机系统的人,等待数据库中数据的应用程序,等待网络返回的浏览器。在等待的过程中,这些域模型可能什么事也不会做。相似的场景反复出现,就迫切地需要我们减少等待时间,提高利用率。

为了实现这样的目标,我们需要关注当前的三大主流思想:多线程,缓存和异步模型。它们的出发点和使用场景不同,但都会缩短等待时间。下面针对这三种思想做大致分析。

[b]多线程[/b]

对于一个耗时或是大数据量的任务,在单线程执行时,我们在等待结果,高速CPU在等待执行数据。为了减少这种等待,用多个线程来分段执行任务,缩短等待结果的时间,在一定程度上提高CPU的利用率。

当然多线程更适用于多个各异任务同时执行,在系统中适时分摊各个任务执行的时间和占用的资源,以达到资源的有效利用。

对于多线程大家了解的很多,这里算是简略提到。

[b]缓存[/b]

有人甚至这样说,Web2.0的特点就是缓存,对于这种理解深以为然。基于网络的应用需要跨越浏览器、网络、服务器和数据库等一系列基础设施,在每一点上都有很多操作流程和逻辑处理。所以缓存-[i]把数据送到离用户最近的地方[/i]-的理念大行其道。浏览器存储着最近访问过的内容,用户请求被分发到离用户最近的CDN,对网络应用的每个请求都要经过Squid,应用所需要的数据库中的常用数据存放在Memcached中,以及其它各式各样的缓存模型。这些各式各样的缓存构建于终端用户于系统应用之间。每层缓存所支撑的,就是当前缓存的目标用户。

当然不至这些,有同样目的的众多应用或是硬件都叫缓存。在减少“用户”等待方面起着极其重要的功能。

[b]异步[/b]

多年来我们的程序基本是同步执行。异步模型没能正常推广的原因有如下原因,一是异构的系统设计复杂,出现的比较少;二是很少有像CPU与外部设备在处理频率上的极大矛盾;三是异步模型本身的技术要求很高。

但当前异构系统不断涌现,随之而来的是众多的RPC框架。在高层系统交互之间实现的异步模型,可以有效降低系统等待时间,减少系统耦合度。在更低层,模块或是代码级的异步处理变得越来越重要。对于Java来说, Java Concurrent API 对于异步模型的成长起着推波助澜的作用。

与前两个主要点的普及度相比,异步模型正不断走向前台,必将成为未来的主流技术。

出来混迟早是要还的。使用这些模型本身是一种高风险投资,伴随着处理效率提高、等待时间降低等优点,技术和实现难度将成为是否选择的一个很大权衡点。如多线程并发可能会出现很难琢磨的异常情况,多级缓存间的数据同步问题,异步系统的执行监控问题等等。但之前的很多普通技术已经很难有潜力去挖掘来提高系统效率,本着技术创新的角度,我们应当在这些新的主流思想上有所作为。

[/size]

[size=medium][url=http://langyu.iteye.com/blog/746179] 我所认识的软件开发原则:权衡[/url]

[url=http://langyu.iteye.com/blog/744455] 我所认识的软件开发原则:封装[/url]

[url=http://langyu.iteye.com/blog/745053] 我所认识的软件开发原则:简单表述[/url]

[url=http://langyu.iteye.com/blog/744442] 我所认识的软件开发原则:二八原则[/url]

[/size]

继续阅读