多线程程序的评量标准

(摘自《Java多线程设计》)
1.安全性-不损坏对象
  对象损坏是一种比喻手法,因为对象是内存上的虚拟实体,不可能有实际损坏的问题.对象损坏则是指对象的状态不符合设计师的设计原意,通常是对象的字段所取得的值并非预期值.

2.生存性-进行必要的处理
    生存性(liveness)是指也许不是现在但一定会进行必要的处理.这也是正常使用的程序的必要条件之一.
    不见得满足了不损坏对象的条件,就是一定是好程序.讲得夸张点,假设现在有一个程序执行到一半突然停止.此时,既然程序没有进行任何处理,对象状态就没有变化;而对象状态没有变化,当然也不会异常,在逻辑上,这个情况也满足了维护"安全性"的条件.但是一个不能动的程序根本没有用,虽然有还是等于没有啊."也许不是现在但一定会进行必要的处理",这就是生存性.
    有时候,安全性跟生存性刚好互相抵触,例如,越想提高安全性就会相对降低生存性.最典型的例子就是死锁(deadlock),这是一种1个以上的线程在彼此等等待对方释放锁住的状况.

3.复用性-可再利用类
    复用性(reusability)是指可再利用类.这并不是必备的条件,但却是提高程序质量的重点条件.
    如果A类原来是一个已确认可正常使用的软件程序的一部分,而且A类又可切出来当作零件,这个类A就是具有高度的复用性.
    在写多线程程序时,若能巧妙地将线程的共享互相斥结构和方针隐藏在类里,这就是一个具有高度的复用性的程序.

4.性能-能快速、大量的进行处理
    性能( performance)是指能快速、大量进行处理.这也不是必备的条件,但仍是欲提高程序质量时应考虑的重点部份.
    影响性能优劣的因素又分好几种,下面是根据Lea的性能分类摘录出来的主要部分:
    数据吞吐量(throughput)是指在一定时间内所有完成的处理量.能处理的数量越多,则表示数据吞吐量越高.
    响应性(reaponsiveness)是指从发出要求到收到反应的时间.所费时间越短,则程序的响应性越高.以GUI为例,到处理"结束"的所费时间可能比到处理"开始"的所费时间更重要.前者是指实际处理所花费时间,后者则是程序第一时间的反应返回到用户那端所花费的时间.简单来说,"点选按键后都没反应,等到10秒后画面上才出现"处理完毕的"的消息"跟"点选按键后立即"处理中...."的消息"两者相比较之后,后者的响应性显然比较高.无论一个处理要花多少时间才能处理完,"立即能收到响应"才会让用户比较放心.这个响应性又称为等待时间(latency).
    容量(capacity)是指可同时处理的数量.例如,服务器可同时处理的客户端数量或文件数量等.
    其他像是效率(efficiency)、可伸缩性(scalability)、退化(degradation)等都可作为性能的评量标准.

评量标准的总结
    程序既不能损害对象,也一定要进行必要的处理.设计多线程程序时,必须维持程序的安全性(safety)和生存性(liveness).
    满足这两个必要条件之后,再来考虑如何提高复用性(reusability)和性能工巧匠(performance).
    根据下列评量标准分析
    a.安全性与生存性-必要条件
    b.复用性与性能-提高程序质量

你可能感兴趣的:(多线程,数据结构,performance)