摘要:
在很多年以前,rdtsc 指令是在 x86 平台作 micro benchmark 的不二选择,它可以用很小的代价(基本上在几十个 CPU 周期)获得时间戳计数器 (time stamp counter) 的值,用来计算小代码段的性能是比较方便的。然而来了多核时代,以及变频时代,由于 CPU 核心的主频不是恒定的了,time stamp counter 的值不代表时间了;同时,又由于 CPU 有多个核心,这些核心之间的 time stamp counter 不一定是同步的,所以当进程在核心之间迁移后,rdtsc 的结果就未必有意义。这一点在陈硕的文章里说得很清楚:http://blog.csd 阅读全文
摘要:
首先要声明,这些比较只适合于在写代码的时候作为所谓的 rule of thumb 采用,任何严肃的性能测试都需要在实际应用中结合真实世界的数据进行评测。简单评测几个在日志库中要用到的操作的性能,大致比例是这样:malloc 256字节 : 30memcpy 256字节 : 1lock_guard : 4write 256字节 : 120writev 2*256字节 : 60其中最后一个是每次写两个256字节的块,循环次数减半,也就是说,写的总数据量相同。重申一次结论:1. 动态内存分配比较昂贵,远远贵过memcpy2. mutex lock还算不错,所以不要太怕用... 阅读全文
摘要:
VIM 属于那种乍一用深恶痛绝,用熟了就觉得离不开的工具。我用它有一段日子了,从开头被逼无奈,到后来其乐无穷,也算是走过了一段比较长的路程。每过一段时间,用熟了的功能就会从脑子记得变成手指记得,这样就可以腾出空间来学习更多的功能,也算是用 VIM 的乐趣之一。之前我用 :q 退出的时候,如果不慎敲反了,就会变出一个小小的窗口,不知有什么用,当时觉得很烦,这几天的空看看,原来那个叫命令窗口 (Command Window),不但不讨厌,还非常有用。仔细看看就会明白,它是显示保存的所有命令历史,在这个窗口上下移动选中命令之后按回车,就可以把该命令再执行一次。这对于重复比较复杂的查找/替换来说,真的 阅读全文
摘要:
这里说的穷人当然不是真的穷,而是指很多情况下无法动用太多工具。例如,一个正在生产环境下运行的进程死锁了,或者你只是在跑一个程序,并没有在调试器里面打开它,然后发现没有响应,日志输出也停止了。由于你是一个有经验的程序员,会想到“我刚刚加上了新的锁策略,不一定稳定,这可能是死锁了“。但是你不想就这么杀掉进程,因为多线程的 bug 不容易重现,遇上一次死锁可能要凭运气,错过了这次,它下次死锁可能会出现在你演示给老板看的时候……怎么办?我的办法是kill -11 pid这不还是杀掉进程嘛?没错,但是你用信号11杀掉它,会让进程产生一个 Segmentation Fault,从而(如果你没禁用 core 阅读全文
摘要:
什么是 clang/llvm/libc++先说一下背景,以防有些同学对 clang/llvm/libc++ 是什么还没有概念:clang 是最近几年(在大财主苹果的支持下)发展得非常好的 C 家族语言 (包括C/C++/Obj-C/Obj-C++) 编译器前端,所谓前端,就是它可以认识 C/C++/Obj-C/ObjC++ 代码,并且把它转化成某种更接近机器指令的形式。理论上说,“某种形式”是语法树,但作为一个工具,clang 实际上会帮助你调用链接器生成可执行代码,这跟 gcc 是一样的。llvm 是一个通用的编译优化和代码生成平台,它定义了一个中间语言 LLVM IR,只要前端把代码编译成 阅读全文
摘要:
我的第一篇博客,好象是在2005年,放在现在已经不存在的 MSN Space 上的。没记错的话,那时候 Blog 还是个新鲜词汇,我才刚刚工作,不知道自己该写点什么,又觉得应该写点什么,于是就放了般若波罗蜜多心经上去。自那以后,人生跌宕起伏,博客也跌宕起伏,等到 MSN Space 关门大吉的那天,我把它们导出到 Wordpress 里一看,哇,500来篇了啊。那时并没有觉得多留恋,甚至还觉得土冒的 Space 换成了 Wordpress 很高兴。回头看来,这好像可以算作博客,至少是中文博客,走向衰弱的一个标志事件。是啊,有了微博轻博,随便发句牢骚就能引来一堆评论,岂非让人们都有了点自己是公众 阅读全文