上一页 1 ··· 3 4 5 6 7 8 9 10 下一页
摘要: 4.4系统调优A)I/O模型前面说到过select/poll/epoll这三个系统调用,我们都知道,Unix/Linux下把所有的设备都当成文件来进行I/O,所以,那三个操作更应该算是I/O相关的系统调用。说到I/O模型,这对于我们的I/O性能相当重要,我们知道,Unix/Linux经典的I/O方式是(关于Linux下的I/O模型,大家可以读一下这篇文章《使用异步I/O大大提高性能》):第一种,同步阻塞式I/O,这个不说了。第二种,同步无阻塞方式。其通过fctnl设置O_NONBLOCK来完成。第三种,对于select/poll/epoll这三个是I/O不阻塞,但是在事件上阻塞,算是:I/O异 阅读全文
posted @ 2012-06-21 18:08 stone lv 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 3.2使用Profiler测试接下来,我们需要使用性能检测工具,也就是使用某个Profiler来差看一下我们程序的运行性能。如:Java的JProfiler/TPTP/CodePro Profiler,GNU的gprof,IBM的PurifyPlus,Intel的VTune,AMD的CodeAnalyst,还有Linux下的OProfile/perf,后面两个可以让你对你的代码优化到CPU的微指令级别,如果你关心CPU的L1/L2的缓存调优,那么你需要考虑一下使用VTune。使用这些Profiler工具,可以让你程序中各个模块函数甚至指令的很多东西,如:运行的时间,调用的次数,CPU的利用率, 阅读全文
posted @ 2012-06-21 18:07 stone lv 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充。在开始这篇文章之前,大家可以移步去看一下以前发表的《代码优化概要》,这篇文章基本上告诉你——要进行优化,先得找到性能瓶颈!但是在讲如何定位系统性能瓶劲之前,请让我讲一下系统性能的定义和测试,因为没有这两件事,后面的定位和优化无从谈起。一、系统性能定义让我们先来说说什么是系统性能。这个定义非常关键,如果我们不清楚什么是系统性能,.. 阅读全文
posted @ 2012-06-21 18:06 stone lv 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 1. 动机在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。如何在不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个类动态添加新的操作,从而避免上述问题?2. 意图表示一个作用于某对象结构中的各元素的操作。它可以在不改变各元素的类的前提下定义作用于这些元素的新的操作。3. 结构图4. 几个要点• Visitor模式通过所谓双重分发(double dispatch) 来实现在不更改Element类层次结构的前提下,在运行时透明地为类层次结构上的各个类动态添 加新的操作。 阅读全文
posted @ 2011-05-31 12:57 stone lv 阅读(942) 评论(1) 推荐(0) 编辑
摘要: 1. 动机在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题?2. 意图定义一系列算法,把它们一个个封装起来,并且使它们可互相替换。该模式使得算法可独立于使用它的客户而变化。3. 结构图4. 几个要点• Strategy及其子类为组件提供了一系列可重用的算法,从而可以使得类型在运行时方便地根据需要在各个算法之间进行切换。所谓封装算法,支持算法的变化。• Strategy模式提供了用条件判断语句以外的另一种选择 阅读全文
posted @ 2011-05-26 12:52 stone lv 阅读(620) 评论(0) 推荐(0) 编辑
摘要: 1. 动机在软件构建过程中,某些对象的状态如果改变,其行为也会随之而发生变化,比如文档处于只读状态,其支持的行为和读写状态支持的行为就可能完全不同。如何在运行时根据对象的状态来透明地更改对象的行为?而不会为对象操作和状态转化之间引入紧耦合?2. 意图允许一个对象在其内部状态改变时改变它的行为。从而使对象看起来似乎修改了其行为。3. 结构图4. 几个要点•State模式将所有与一个特定状态相关的行为都放入一个State的子类对象中,在对象状态切换时,切换相应的对象;但同时维持State的接口,这样实现了具体操作与状态转换之间的解耦。• 为不同的状态引入不同的对象使得状态转换变得更加明确,而且可以 阅读全文
posted @ 2011-05-24 13:12 stone lv 阅读(536) 评论(0) 推荐(0) 编辑
摘要: 1. 动机在软件构建过程中,某些对象的状态在转换过程中,可能由于某种需要,要求程序能够回溯到对象之前处于某个点时的状态。如果使用一些公有接口来让其他对象得到对象的状态,便会暴露对象的细节实现。如何实现对象状态的良好保存与恢复?但同时又不会因此而破坏对象本身的封装性。2. 意图在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。3. 结构图4. 几个要点• 备忘录(Memento)存储原发器(Originator)对象的内部状态,在需要时恢复原发器状态。 Memento模式适用于“由原发器管理,却又必须存 储在原发器之外的信息” 阅读全文
posted @ 2011-05-17 13:14 stone lv 阅读(457) 评论(0) 推荐(0) 编辑
摘要: 1. 动机在软件构建过程中,一个请求可能被多个对象处理,但是每个请求在运行时只能有一个接受者,如果显式指定,将必不可少地带来请求发送者与接受者的紧耦合。如何使请求的发送者不需要指定具体的接受者?让请求的接受者自己在运行时决定来处理请求,从而使两者解耦。2. 意图使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。3. 结构图4. 几个要点• Chain of Responsibility 模式的应用场合在于“一个请求可能有多个接受者,但是最后真正的接受者只有一个”,只有这时候请求发送者与接受者的耦合才有可 阅读全文
posted @ 2011-05-13 13:02 stone lv 阅读(395) 评论(0) 推荐(0) 编辑
摘要: 一、 缘起 最近在听李建忠老师的面向对象设计模式的讲座,比较有收获。 系列讲座听到后面,感觉各种模式都很像了。其实设计模式也是一种方法学,是为了提高软件应对变化的能力的一种方法学,这让我想起了武侠中的各种武功和武林高手。二、 武侠与设计模式的方法学比较 小时候喜欢武侠的兄弟们一定都很向往那些绝世神功,一阳指、凌波微步、降龙十八掌。。。还有那些武林秘籍,玉女心经、九阳九阴。。。虽然有一些夸张虚构的成分,但是这里面反映出的方法学,是值得讨论一下的。 这些神功秘籍的主要目的(也许有点狭隘)都是为了提高攻击力,增强防守力,以便能在打斗中击败对方。因为击败对方的方法很多,所以有了各式各样的神功。比如 一 阅读全文
posted @ 2011-05-11 15:23 stone lv 阅读(607) 评论(1) 推荐(0) 编辑
摘要: 1. 动机在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系”——一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。2. 意图定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新3. 结构图4. 几个要点• 使用面向对象的抽象,Observer模式使得我们可以独立地改变目标与观察者,从而使二者之间的依赖关系达致松耦合。• 目标发送通知时,无需指定观察者,通 阅读全文
posted @ 2011-05-11 12:54 stone lv 阅读(540) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 下一页