用户操作
[即时聊天] [发私信] [加为好友]
黄海全ID:optman
43115次访问,排名2598好友1人,关注者1
比思想更有力的是行动
optman的文章
原创 107 篇
翻译 6 篇
转载 6 篇
评论 16 篇
最近评论
freeeim:犹如荒漠里的一个绿洲,救了俺的小命,呵呵。
你就这么厉害。
yumn2004:这篇文章对我有很大的帮助,谢谢楼主!
zhanghs202:你那个只是讨论一个主题或者两个人谈论一个话题而已
zhanghs202:你说的那个叫需求吗?肯定不叫,如果你不知道你要开发的东西是什么,你怎么下笔啊?
zhanghs202:听说丰田汽车早上9点上班,8:50的时候,安装车间一个零件都看不到,一个人也没有。晚上6点下班,6:10分的时候,车间里同样是看不到一个零部件。如此完美的景象,和公司的机制有莫大的关系。制度化,反腐倡廉的最佳利器是法律,制度化,以及保障机制。然后带来政府的工作的效率。软件研发的制度化,是保障沟通效率,正确高效工作的保证。
文章分类
    收藏
      相册
      Blog
      存档
      软件项目交易
      订阅我的博客
      XML聚合  FeedSky
      订阅到鲜果
      订阅到Google
      订阅到抓虾
      订阅到BlogLines
      订阅到Yahoo
      订阅到GouGou
      订阅到飞鸽
      订阅到Rojo
      订阅到newsgator
      订阅到netvibes

      原创 Amdahl's law收藏

      新一篇: 如何等待进程树结束 | 旧一篇: 软件需求本质上就是一个沟通的问题

      记得以前有一个同事争辩为什么不使用PHP 5的类功能时,说他做了一个试验,那就是使用普通函数方式比类方式效率要高出10倍以上。对于他的这个理由,当时我也一时反应不过来,事情就这样不了了之了。后来仔细想了一下,他的这个试验并不能说明什么问题。在一个系统中,会有很多的部分,系统运行的性能是取决整体的所有部分之合,而不仅仅是某一个部分。特别是,在Web应用中,最大的瓶颈是网络响应以及数据库访问,像PHP类封装产生性能消耗所占比重其实是微乎其微的。假设PHP类代码执行的时间占整个系统的10%,那么即便优化到零占用(该部分的效率提高就何止是一千一万倍,简直就是无穷),那么整体的性能也不过是提高了10%而已!所以,关键是不是提高单点的性能,而是整体的性能。与其在不重要的地方花功夫,还不如找到真正的瓶颈,以达到四两拨千斤的效果。

      今天看文章才知道,原来上面的道理早就是定理了,那就是Amdahl's law。其大意是,如果一个占整个任务比重为P的组件的运行效率为原来S倍,那么当S->∞的时候,效率的最大提升也不过是1/(1-P)。

      由此,我们可以知道,要提高整体性能,必须是全方位的。由此,也得出,在串行计算的系统中,路径上的任何一块都可能是整个系统的瓶颈。必须把每个任务都化成为独立的子任务并行执行,使得每个一个P值都可以接近于1。

      因为Amdahl's law的存在,所以有人指出现有的N-层软件架构是有问题的。因为N-层架构是由不同的层次组成的,即每个层次只占整个任务的一部分比重即P。这使得扩展很复杂,而且不同层次扩展的方式以及效果并不一样,所以不符合线性可扩展性。即限于P的值,增加再多的硬件,再多的优化,最多也只能达到1/(1-P)的效果。因此提出,把所有的n-层架构都整合在一个处理单元(process unit)里,这样就可以通过直接增加处理单元而完成线性可扩展性。

      乍看起来,这么说也是有道理的。提高系统的内聚性,减少对外的耦合,这是模块化原则,也是性能提高的原则,因为耦合总会带来性能的下降。不过再想想,这样处理扩展性,虽然看起来很简单了,却不利于分工和合作。这样的话,整个就是一个封闭系统,开发和维护就复杂了。N层结构的好处,就是不同层次之间的交互只是通过接口,这样利于不同层的内部创新,简化每个层的工作。而且毕竟不同层次的工作是各有特点的,使用不同的扩展机制也是为了达到更大的优化(相反,一视同仁的优化方式未必对所有层次都能达到最优)。

      还是根据Amdahl's law,我们需要把任务进行分解成独立子任务,以并行执行。分解之后,因为每个子任务都很简单,那么就可以比较好的优化,可以更高效的执行,这也是Google的MapReduce技术的基本原理。

      如何定任务,使得其可以相对独立,可以高效运行,线性扩展,这就是问题的关键了。你可以说是完成一个复杂的完整的业务逻辑,也可以说只是完成一个简单的存贮动作。不同的层次,不同的粒度,视情况需要了。

      发表于 @ 2008年03月29日 17:32:00|评论(loading...)|编辑

      新一篇: 如何等待进程树结束 | 旧一篇: 软件需求本质上就是一个沟通的问题

      评论:没有评论。

      发表评论  


      当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
      Csdn Blog version 3.1a
      Copyright © 黄海全