3.5 流水线式设计模式Pipelining Design Model
“流水线式”经常在讨论CPU 技术时被谈及。在CPU 设计中,非流水线式设计模式的问题在于:每个单元指令必须在另一个指令开始前完成。这样会有很多的空闲时间片,没有效率。而流水线式的最基本思路在于充分利用CPU 内部空闲的组件,以至于可以同时处理多了单元指令,减少空闲时间片。也就是说,单元指令之间无须等待。非常明显,这个技术可以极大程度地提高硬件效率。
在SoftEngine 内借用了这种思路,将任务代替了指令,将功能对象代替了硬件组件。流水线式设计所运用的基本理论:将大的任务划分成一系列可交迭的、较小的任务,同时被一些功能对象分布处理。所以,在SoftEngine 基础上,应用的设计人员,需要分析应用的处理流程,在设计阶段划分大任务,提高应用系统的性能。SoftEngine 可以有效地支持这种先进的设计模式 。
举个例子,在普通的开发设计( 非流水线式设计) 中,假设一个任务需要4 个步骤完整,
第一步:保存数据到磁盘,耗时100ms
第二步:从磁盘中读取历史信息,耗时20ms
第三步:从内存中读取配置信息,耗时5ms
第四步:结果计算,并返回结果,耗时10ms
见下图:
图表 11 Non-pipelining mode
整个流程的处理时间需要135ms ,请求的返回时间也是135ms 。不难看出,第一步虽然耗时最多,但属于工作流的关键步骤,后续步骤也不等待其运行结果。而且在这个工作流中,每步操作,都需要等待上一步的操作(在同一时刻,只能有一个步骤在工作),所以135ms 不是最优化的结果。
通过流水线式设计模式,可以进步优化。首先,将这个任务,划分为三个小任务分别由四个对象处理,所以设计了5 个对象 :
对象A :划分大任务为三个小任务,同时分发。作为任务开始。
对象B :保存数据到磁盘,耗时100ms
对象C :从磁盘中读取历史信息,耗时20ms
对象D :从内存中读取配置信息,耗时5ms
对象E :等待任务2 和3 的结果,计算后返回,耗时10ms
见下图:
图表 12 Pipelining mode
虽然每个步骤单位处理的时间并没有减少。但对象B 的费时操作,被安排在主要流程之外,所以没有影响整个处理时间。对象C 和D 的处理被安排在同一时刻发生。对象E 等待C 和D 的结果。所以只要工作流程为:
(A) -> (C, D) -> (E)
步考虑任务传递时间耦合时间,及A 的分发时间,总的响应时间为:
max( C, D ) + E = max( 20, 5 ) + 10 = 30ms 。
所以,流水线式设计模式的优势,显而易见。同时也改进了以往开发流程。
4. 分布式系统对开发流程的改进
以上介绍了分布式开发系统的关键概念及技术。利用这些技术,不但可以提高系统的性能,也可以改进以往开发的环境和步骤。开发步骤包括以下5 步:
设计Design: 改变以往从头设计的做法,主要精力集中在应用的业务流程、工作流程、任务流程的设计。不断优化流程,是应用系统成功与否的关键。
定义Define: 流程确定之后,就可以从中定义出各种功能对象,服务对象,任务对象,并加以描述。此过程需要将定义的对象放入确定的流程中,模拟其使用性、有效性等 。
实现Realization:开始实现定义好的的各种对象。并进行单元白盒测试,保证每个对象自身的稳定。在实现过程中会发现与定义中相矛盾的地方,此时需要与设计人员探讨修改。
部署Deployment: 实现了每个对象之后,就可以对系统按照设计的流程进行部署。整个过程,都是通过配置文件进行系统调整。所以只要对象具有较强的独立性,并且保证每个对象已达到错误最小化,就可以保证在联合测试中,不会有过多的修改工作。但部署中,会根据实际境况对原先的流程进行调整,以达到最佳效果。
运 行 Running: 开发的最后一步,就是进入运行状态。
图表 13 Development process
与传统开发流程相比,每个阶段的划分都更明确,这样有利于不同角色的划分和分工。尤其在部署阶段,原始设计人员可以使用编码完成的组件对象,直接介入系统的构建中。另外一个优势在于:整个开发周期变短。由于无需从头设计,按照一定的模式定义对象,程序的统一结构化,这些都是传统软件开发所无法比拟的。尤其充分的白盒测试,使联合测试的成功率提高,时间节省了许多 。
5. 小结
本文,以SoftEngine 为例,简洁地介绍了,以面向对象方式,解决分布式或传统应用系统开发所需的关键技术。希望能为非Web 应用开发平台,提供一些好的体系结构,改善我们的开发环境。
在后续文章( 应用篇) 中,将陆续结合几个实际中的案例,如:如何构建最快、最灵活、最稳定的无线数字增值服 务 ( 短信SMS, 彩信MMS ) 平台,以及相关的组件等,描述其分布式、组件化的体系,及具体的解决方案。进一步谈讨,实际应用的可操作性。
注:
在文章中所提及的一些观点,只是本人在开发中的经验所得,只代表了
文章中所涉及的分布式技术,也可在SoftEngine 中得到证实 。
更多案例,及相关技术软件下载:http://www.snapbug.net
(完)