博文

串行事务调度初窥(2005-07-12 18:55:00)

摘要:“事务(Transaction)”应该可以认定是一个数据库术语了,但在本文中它可被宽泛地认为是一个可供调度的信息集合,被交通员调度的车辆便是生活中的例子。
“串行”是对目前大多数人进行开发的串行机而言的,即在每一个时间步只执行一个指令,操作一个数据。也就是说,本文不涉及并行算法。
本文旨在介绍事务调度的最基本的几种管理方案。此方案没经过特殊优化,模型很可能效率不高,但足以描述几种调度思想。
下面,我们将从简易的队列开始模拟事务的调度。


一.队列
队列(Queue)是基本的算法结构之一,采用FIFO(First In First Out)机制,体现传统的“先到者先得”的思想,要求事务执行的优先级以事务加入的时间为线索。
调度模块通常有两部分组成:监听和事务处理。以后各节均以此为模版讲解。
首先,应当阐明本例中可用到的队列方法:Empty()返回一布尔值,标明队列是否为空;Front()返回队列的队头事务;EnQueue(Code c)将事务t插入队尾;DeQueue()将队头删除。
然后,假定当前用于缓存事务的队列为TransQ,那么监听代码可写作:
public void Listen(){
    Code c;//c用于储存属于某个事务的指令
    while(AppRun){
        //AppRun是一个布尔变量,用于终止程序

        //得到要加入的事务
        AcceptNewTransaction(out c);

        //加入事务
        TransQ.EnQueue(......

阅读全文(4669) | 评论:2

虚拟机文化(2005-05-17 21:42:00)

摘要:注:文中的“虚拟机”指软件开发框架及现实的virtual machines。但所述特性并非适用于所有虚拟机。


现今的虚拟机技术日臻成熟,虚拟机的应用也越来越广泛。为什么呢?因为人们在总体上利大于弊的判断基础上逐渐接受了虚拟机。然而,人们往往去探讨如何更好地使用虚拟机来架构自己的程序,却没有认真研究软件开发中虚拟机思想的运用。
在这里,我将借剖析虚拟机的优势来引出部分有关思想。


一.跨平台
“跨平台执行”应当是每一个桌面用户的愿望:用着Windows的简便,想着MacOS的绚丽;WinXP够优秀,却难以运行早期Windows的非兼容程序及LE格式程序。于是乎,我们用VirtualPC和VMware去构建一个虚拟的操作系统,在新系统中执行我们的目的命令来完成相应操作;我们用WinXP的兼容性模式调整工具来运行早期Windows的非兼容程序;Lindows(现已更名为Linspire)也提供了折中的方案。
但是,这样只是委曲求全的方法,最根本的方法是:拿起电话,把那个程序员吼起床,然后告诉他“给我准备好XX平台上的程序”。当然,这显得不可理喻:一方面,没人有心情听你这样啰嚎;另一方面,构建跨平台的程序所需的技术又怎是一朝一夕完成的,应从基础库基准上按多平台需要进行开发。
“跨平台开发”绝对是每一个桌面开发者的美梦:有谁不想让自己的一份代码在多个平台跑起来?
wxWindows框架让纯编译的C++可以一码多平台,Delphi2005也可让代码分别编译为Windows和Linux的本地代码,这怎么不令人心动!.net Framework的开源实现mono以及JavaVM更令代码的多平台运行达到一个新的层次,让代码与操作系统相分离,并提供成千上万个类来提升开发生产力。
多平台是为了什么?简而言之,即提高市场适应力,更是提高竞争力。金山与IBM携手推出WPSOfficeStorm也可说明这一点。OpenOffice已成为昨日黄花,微软势必让其从Linux上绝迹,而Storm的推出压制了几乎所有Linux版中文字处理套件,市场反响很强烈。
这是从商业角度考虑的结果,如果从版本进化角度考虑,可以参见[二]。


二.无函数不定性
在NT技术刚......

阅读全文(4927) | 评论:0

Humane Programming——人性化编程(2005-03-26 09:53:00)

摘要:Humane Programming——人性化编程
    尽管现今各国均投入大量人力物力去研发所谓的真正的“人工智能”,但大家每日所对的计算机始终是个死物——一个让它做它才做的死物,甚至懂得罢工偷懒的死物。
    因此,支持库(Java VM,VB Runtime,.net Framework等)总是机械地吞吐着指令集中的动作。即使是那高智能的优化器,也只不过是将某句或多句汇编代码与优化库案例作对照,然后拟出相应的优化代码罢了(当然也并非如此简单)。
    那么,对于下面的案例,优化器又能做什么呢?
    小A为某网站的用户管理系统制作支持模块,具体来说,就是去写程序来管理用户信息。小A采用顺序文本文档为载体,亲自编写了针对顺序文本的繁琐的基本操作模块。但是运行之后,查找匹配速度极慢,I/O超出负荷,缓存文本大小呈几何级数增长。总而言之,该产品很不尽人意。
    然后,小A找来了优化器套件,优化器针对程序中所调用的函数库进行了部分更改后,带宽占用下来了、CPU占用率也下来了,但是最要命的速度与空间占用问题却得不到解决。这真是个耗时又不便利的豆腐渣工程。
    其实,我们早就发现,如果小A采用MySQL等专业数据库引擎作为后台支持,不仅有关代码的编写容易、维护方便,而且也不会出现速度滞后、空间利用差的问题。可是,优化器却不能为小A指出一条明路。
    尽管上面这个案例很愚蠢,但它也从一个方面向我们阐述:人对软件过程又绝对的作用。这就是Humane Programming的宗旨,要让每一句有效代码都人性化,让每一个开发阶段人性化,我们应当进行人性化编程。
    以下是我对Humane Programming的诠释。


一.不要总为简短的语句沾沾自喜
    似乎程序设计的进步总是伴随着编码量的减少。VB.......

阅读全文(4500) | 评论:0