新年快乐!2012 年就要过去了,本月看代码为主,少动手了,分享两篇文章给大家:

第一篇是 varnish 作者 Poul henning 写的,题为 Notes from the Architect,作者的观点可以总结为三点:

  • 相信虚拟存储系统,不要手动进行内存分页管理,而是依赖虚存系统做这件事。不要和虚存系统作对。
  • 减少内存的访问次数,最小化多核心之间对于 cache 的争夺。
  • 合理调度线程,按最近工作时间来安排,尽可能保证 cache 已处于热身状态。

另一篇是 LuaJit 的作者 Josh Haberman 在邮件列表里提到的, 为什么手写的汇编码会比编译器的好 。作者着重讨论的,是编译器的主循环实现。由于编译器难以预测数以百计的可执行路径中,那个是快速路径,那个是慢速路径,走哪一个路径的概率比较大,所以无法很好的生成优化的汇编码。由于条件分支判断失败引致的惩罚较大,因此手写汇编码的确有可能做得比编译器好。

这两篇文章的启迪在于,现代意义上的编程,已经不再是单纯业务逻辑的考虑,而要通盘考虑计算机系统的储存器结构和 CPU 指令优化。看来还是要看底层一点的东西了。