摘要: 转自:http://www.yankay.com/%E5%86%85%E5%AD%98%E7%A9%B6%E7%AB%9F%E6%9C%89%E5%A4%9A%E5%BF%AB%EF%BC%9F/一般来说。CPU需要0个周期来访问其寄存器,1-30个周期来访问高速缓存,50-200个周期来访问主存。对于Intel Core i7来说。这个值可以很具体。Intel Core i7的主频约在2-3GHz。可以计算出。L1—指令缓存L1-数据缓存L2-缓存L3-缓存内存访问周期441130-4050-200缓存大小32KB32KB256KB8MB若干GB访问时间2ns2ns5ns14-18ns24- 阅读全文
posted @ 2013-01-21 13:43 传灯 阅读(399) 评论(0) 推荐(0) 编辑
摘要: 对一个shell命令执行的结果进行进一步处理,有几种情况:1. 需要判断执行是否成功,直接用$?即可,也可以用这样写:if ls $dir;thenecho "$dir exists"elseecho "$dir not exists"fi2.需要对程序打印出的数据,这时候可以这样用:a_week_ago=`date -d "5 days ago"`echo $a_week_ago3.在bash中,如果要对pipe的结果进行处理,有一个PIPESTATUS,可以看到pipe中各个命令的执行结果。 阅读全文
posted @ 2013-01-02 11:01 传灯 阅读(215) 评论(0) 推荐(0) 编辑
摘要: shell中如果需要进行逐行处理一个文件的操作,需要这样写:while read -r line;do echo $linedone < $file如果文件的内容已经在一个变量中了,需要这样处理:while read -r line;do echo $linedone <<< $var这里有一个问题,<<<在一些shell里面是不支持的,所以如果运行遇到了这个错误:Syntax error: redirection unexpected就需要看一下是否用到了/bin/bash,因为在一些linux发行版上,/bin/sh默认指向的可能是dash。 阅读全文
posted @ 2013-01-02 01:11 传灯 阅读(237) 评论(0) 推荐(0) 编辑
摘要: 前几天看了Jeff dean大牛关于google提高响应速度的PPT,感受颇多。能感受到的在很多公司里,往往把业务层面和较高的架构看的很重要,而缺少很多细节层面的精益求精。大系统的问题:首先是对于大系统的理解,往往在一个产品的初期,系统是比较简单的。这个时候对整个系统的把握比较容易,而且可以通过优化关键的瓶颈点达到系统的高效。在系统发展的过程中,会不断的有模块增加进来,这个时候系统可能是数十个或上百个程序员在维护的状态,在这个时候,没有人能够清楚的了解系统的瓶颈。主要原因有两个:1. 模块过多,而且模块之间会有依赖关系,在一个模块升级的时候,很难清楚的预见会对其他相关模块造成什么影响;2. 系 阅读全文
posted @ 2012-05-01 12:16 传灯 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 在vim中配置了Project,但是在文件切换的时候总是会报错E303,导致每次文件切换都会提示一次,明显影响开发效率。参考了vim中文网上的一篇文章,按照文章的做法操作了一下。首先:help E303Unable to open swap file for "{filename}", recovery impossibleVim was not able to create a swap file. You can still edit the file, but ifVim unexpected exits the changes will be lost. And V 阅读全文
posted @ 2012-04-19 18:59 传灯 阅读(1618) 评论(0) 推荐(0) 编辑
摘要: 在编译一个项目的时候,发现有这样的warning信息:dereferencing type-punned pointer will break strict-aliasing rulesgoogle了一下,发现这是因为GCC3中引入了strict-aliasing机制导致的gcc 3 manual 对于-fstrict-aliasing参数的说明是:Allows the compiler to assume the strictest aliasing rules applicable to the language being compiled. For C (and C++), this 阅读全文
posted @ 2012-04-17 19:05 传灯 阅读(1266) 评论(0) 推荐(0) 编辑
摘要: 使用STL的几个容器,经常会遇到遍历所有元素,然后删除满足某些条件的元素。直接删除是会有问题的,比如:for (vector<T>::iterator it = lst.begin(); it != lst.end(); ++it){ if(condition) { lst.erase(it); }}因为对list而言,一旦一个元素被删除了,指向该节点的iterator可能会失效,再执行++it可能就会有问题。查了一下stl的源码,list的源码在:stl_list.hiterator erase(iterator __position);具体的实现在:list... 阅读全文
posted @ 2012-04-11 18:38 传灯 阅读(316) 评论(0) 推荐(0) 编辑
摘要: ACID,数据库领域的特性,但是某些特性需要牺牲系统的响应时间。Atomic:原子性,在一个事务里的操作全部成功或者全部回滚;Consistent:一致性,一个操作不会导致db存在不一致的状态;Isolated:隔离性,事务之间不会互相影响;Duration:持续性,即使服务重启,已经完成的事务也会保持不变;BASEBasicAvailability:基本可用性Soft-state:弱状态,这个网址有:http://www.tekelec.com/tekelec-blog/index.php/2009/07/faq-what-does-soft-state-meanEventual consi 阅读全文
posted @ 2012-04-10 16:34 传灯 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 从客户端有数据产生到数据被保存到持久存储系统上需要经历的步骤:1. 数据在客户端的内存里2. 客户端把数据发送到服务端内存里;3. 服务端调用write写文件,写成功;4. 文件系统把内容flush到磁盘控制器;5. 磁盘控制器把内容保存到物理磁盘上;上述的5个步骤中,1、2的时候无论客户端还是服务端死掉数据都是不会损坏的。如果在步骤3之后应用死掉而机器还在的话,不会有太大的问题;如果这个时候机器死掉的话会丢失这个数据。其中,磁盘控制器把数据刷到物理介质上的时间点是不确定的,如果不是磁盘有备用电源就不要开写缓存(可以用hdparm等命令看到并管理,但是没有试成功),仅开读缓存即可。文件系统把数 阅读全文
posted @ 2012-04-09 12:42 传灯 阅读(175) 评论(0) 推荐(1) 编辑
摘要: 亚马逊 dynamo的解决的问题:可用性、一致性、成本效益和性能。主要完成对业务状态的管理。途径是去中心化,即去掉一个中心节点导致的单点故障或者影响服务质量的情况。主要确保数据永远可写、高可用性两点。dynamo的特性:数据划分一致性哈希对象版本去中心化技术分布式故障监测(gossip)对于ACID,dynamo只提供高A,弱C,不提供I的特性。SLA(服务水平协议):在并发达到500次/秒的时候,99.9以上的请求在300ms之内。设计原则:永远可写:为了确保系统的可用性,在数据不一致的时候牺牲一定的一致性,保证数据永远可写。采用对象版本的方式来达到最终一致性;协调冲突:最后一次写入获胜;增 阅读全文
posted @ 2012-04-09 12:40 传灯 阅读(371) 评论(0) 推荐(0) 编辑