摘要: 开篇上一篇博文对缓存的思考——提高命中率详细介绍了高速缓存的组织结构,并通过实例说详细明了cpu从高速缓存中取数据的过程,对于缓存的工作机制应该有了清晰的认识。这篇博文就来简单讨论以下对于缓存在实际开发中的应用,这里将告诉你如何让你的程序充分利用该缓存,即如何编写高速缓存友好的代码。提示:如果高速缓存的运行机制还没有清晰的认识,请参照前面文章。注1:关于文中提到的局部性的相关知识参照:局部性原理浅析——良好代码的基本素质注2:这是一个系列的文章,收录在程序性能优化注3:文章知识有些地方不容易理解,所以用心才能看完噢。“用空间换时间”在搞算法的时候经常能听到这种说法,算法研究中通常要考虑算法的时 阅读全文
posted @ 2012-02-15 15:20 Geek_Ling 阅读(15649) 评论(9) 推荐(8) 编辑
摘要: 开篇编写高效的程序并不只在于算法的精巧,还应该考虑到计算机内部的组织结构,cpu微指令的执行,缓存的组织和工作原理等。好的算法在实际中不见得有高效率,如果完全没有考虑缓存、微指令实现的话。前两篇博文局部性原理浅析介绍了程序的局部性原理,如何写出局部性良好代码。提高程序性能、何为缓存讨论了存储器层次结构,计算机内部的存储结构、缓存的概念,简单的介绍了缓存的工作机制。建议先阅读前两篇博文,虽然他们之间联系不大,在前面也有一些对本文的铺垫。而且,这是一个系列的文章。旨在优化程序性能。这篇博文主要介绍的是缓存的组织、工作原理。拨开迷雾,让你更加清晰的认识缓存。通用缓存结构回顾在提高程序性能、何为缓存中 阅读全文
posted @ 2012-02-14 08:28 Geek_Ling 阅读(30725) 评论(17) 推荐(26) 编辑
摘要: 开篇上一篇博文局部性原理浅析——良好代码的基本素质中对程序局部性有了一个简单的介绍。基本上已经知道了如何编写有良好局部性的代码。但是为什么有良好局部性的代码就能有良好的运行效率,这个问题将在这篇博文中给出解答。至于存储器内部的组织实现,将在下篇文章中叙述。存储器层次结构我们知道,计算机里的存储器有:硬盘、主存、高速缓存(其中又有一级高速缓存、二级高速缓存等等)、在往上就是寄存器。存储器在计算机内部的组织方式如下图所示:相信上图大家并不陌生。wiki对The memory hierarchy 的介绍的时候也有此图。我们发现,越往上,存储器的容量越小、成本越高、速度越快。为什么会出现这样的结构呢? 阅读全文
posted @ 2012-02-12 12:20 Geek_Ling 阅读(7431) 评论(5) 推荐(5) 编辑
摘要: 开篇一个优秀的程序、优美的代码,一般都具有良好的局部性。简洁、高效是每个程序员的追求。了解程序的局部性,能编写出更高效的代码。因为有良好局部性的程序能更好的利用缓存。不过这方面的只是将在以后的文章中介绍。这篇文章就简单的介绍以下程序的局部性原理。什么是局部性局部性通常有两种形式:时间局部性(temporal locality)时间局部性指的是:被引用过一次的存储器位置在未来会被多次引用(通常在循环中)。空间局部性(spatial locality)如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。(这样说过于理论了些,在下面的论述中会有例子说明)数据引用局部性例子是最好说明问题的途径 阅读全文
posted @ 2012-02-11 21:48 Geek_Ling 阅读(20131) 评论(12) 推荐(4) 编辑
摘要: 网上有很多关于程序员必读的书单,感觉都不是很有代表性。今天无意看到了一篇总结还算不错的书单。和园友们分享。以下书单中提到的书看过一部分,给我的感觉是经典就是经典。读过之后确实得到了很多东西,它们都潜在的影响着我。透过书更能感受到的是一种思想,理性,透过经典,能得到质的升华。另如果园友有好书、何不一起分享进步以下是原文:哪本书是对程序员最有影响、每个程序员都该阅读的书?国外知名网站stackoverflow上有一个问题调查:哪本书是对程序员最有影响、每个程序员都该阅读的书?,这个调查已历时两年,目前为止吸引了153,432人访问,读者共推荐出了478本书(还在增加),其中最火的一本书《Code 阅读全文
posted @ 2012-02-06 12:17 Geek_Ling 阅读(6894) 评论(20) 推荐(7) 编辑
摘要: 开篇相信有过编码经验的人都知道,程序的正常运行,只是最基本的要求。更多的,还要考虑程序的性能,运行效率,组织结构,和重用性等等。今天将简单的讨论一下如何优化程序性能。要写出高效的程序,可能多数初学者想到的是在程序中用合适的算法和数据结构。这确实是一中提高程序性能的主要方法。而这里要讨论的是另一种方法,也是很多人都忽略但确实很重要的方法。也是我们这篇文章的主题:如何编写出编译器能有效优化的源代码。编译器优化的局限性没有万能的东西,编译器也一样。现代编译器都会对源代码进行优化,以提高程序的性能。比如linux下的GCC编译器就能控制优化的等级,优化等级高,对应的程序性能好。对于给定的代码,编译器并 阅读全文
posted @ 2012-02-04 23:24 Geek_Ling 阅读(18969) 评论(0) 推荐(5) 编辑
摘要: 开篇这篇文章介绍找最短路径的一种算法,它的字我比较喜欢:启发式搜索。标题上写的是翻译,只是觉得原文讲解的思路很清晰。这篇文章整体构思和原文相差不多,只是有些地方有小的改动,我想的是用更容易理解的方式、更简洁的把A*算法的思想呈现出来。文章中出现的词openlist,closelist我觉得用原文会更好故没有翻译,在文中会有解释。原文地址http://www.gamedev.net/page/resources/_/technical/artificial-intelligence/a-pathfinding-for-beginners-r2003各位也可以直接参考原文。网上关于A*算法的文章还 阅读全文
posted @ 2012-01-15 18:17 Geek_Ling 阅读(14788) 评论(9) 推荐(10) 编辑
摘要: 上一篇对死锁的思考【1】介绍了什么是死锁,对于每种类型一个资源和多个资源的检测,这里会介绍一下如何从死锁中恢复死锁的避免死锁的预防说明:这不是一篇专业性的文章,只是力求让读者能理解、知道什么是死锁。如果想要更具体深入的知识还需要查阅相关文献。从死锁中恢复抢占性恢复从字面上看,抢占性恢复就是强制把已经被占有的资源强制拿过来,分配给需要他的进程,而达到解除死锁的目的。在不通知持有资源进程的情况下,将资源强制占用,用完后又还给进程,这和资源本身的特性有关。即有的资源是不可抢占的。比如说一个正在刻录光盘的光驱,在它完成之前是不可抢占的。回滚技术简单的说,就是再检测到死锁的时候设法回到还没发生死锁的状态 阅读全文
posted @ 2012-01-13 20:45 Geek_Ling 阅读(2049) 评论(9) 推荐(4) 编辑
摘要: 开篇死锁是操作系统中的重要概念,和操作系统中的其他重要概念一样,对它的正确理解将帮助你写出更加高效、优秀的程序。这里没有晦涩的定义,只有易懂的描述和生动的例子。相信你看了之后会有所收获。什么是死锁简单的说,死锁就是电脑里的硬件资源或者软件资源不够用了。为什么会有这种情况呢?比如说A占有资源m,请求资源n。B占有资源n请求资源m。进程A和B都会因为请求不到自己的资源而睡眠。下面将进一步介绍。更形象的描述-死锁建模:为了能对死锁进行更好的分析,我们为死锁建模。就是用一个有向图来表示进程和资源的使用情况,圆形节点表示进程,方形节点表示资源。资源指向进程的边表示该进程占有该资源,进程指向资源表示进程请 阅读全文
posted @ 2011-12-29 23:19 Geek_Ling 阅读(2612) 评论(2) 推荐(3) 编辑
摘要: 图是一种常见的数据结构,深度优先和广度优先搜索都是常用的算法,这篇博文先介绍深度优先搜索。和往常一样的,我会用朴实的语言来介绍它,所以只要认真看一定能理解。开始会先介绍下图的表示方法,如果已经掌握了大可跳过。图的表示要表示一个图G(V,E)有两种常见的表示方法,邻接矩阵和邻接表。这两种方法可用于有向图和无向图。对于稀疏图,常用邻接表表示,它占用的空间|E|要小于|V|*|V|。邻接表:图G(V,E)的邻接表表示由一个包含V列表的数组Adj组成,其中的每个列表对应于V中的一个顶点,对于v中的任意一个点u,灵界表Adj[u]包含所有满足条件(u,v)属于E的点v,也就是Adj[u]中包含所有和u相 阅读全文
posted @ 2011-12-26 11:10 Geek_Ling 阅读(22439) 评论(0) 推荐(3) 编辑