偶然在Martin Flower的博客上看到了一篇讲述LMAX架构的博文,里面有一小块提到了“机械同感”Mechanical Sympathy(不知道该怎么翻译好)。恰逢最近正在看第二版的CSAPP(Computer System: A Programmer Perspective,深入理解计算机系统),感慨万千!
“机械同感”(mechanical sympathy)来自于赛车比赛,它反映了车手对赛车有一种内在的感觉,所以他们能够赛车达到最佳状态。然而多数程序员缺少这种对编程与硬件交互的感同身受的情感。要么是没有,要么就是以为自己有,实际上却是基于很久以前硬件工作方式而建立的概念。这说得实在是太多,作为一个程序员,在写程序时是否考虑过自己的代码能否正确地运行在底层硬件上,又是否考虑过怎样榨干硬件性能让自己的代码跑得飞快,又是否考虑过自己的代码能否被人钻了空子发生安全问题。我想这三方面也许是学习硬件工作原理的最主要因素,即让自己的代码:正确、高效、安全地在硬件上跑。简单来说就是快准稳!
这同时又让我回忆起另一件事。曾经看过一些《一个操作系统的实现》写过一些汇编。一个很深的感触就是:代码万变不离其宗,无论怎样写都跳不出Intel X86的CPU和指令集。就像孙猴子跳不出如来佛的五指山一样,我们也没法写出超脱于底层硬件的代码。所以尽管软件世界风起云涌,各种新算法、新语言、新概念层出不穷,然而硬件世界确实波澜不惊。内核引导、LDT、GDT、Ring0到Ring3这些基本原理未曾变过,如此强烈的反差怎能不叫人感慨。
为了增强自己与计算机的联系,拟定了一些有意思的题目,但不知何日能够完成,先记下一笔:
Ø Redis的RDB复制对copy-on-write机制的运用
Ø Nginx中的epoll和sendfile
Ø Kafka和Varnish如何高效利用pagecache的
Ø MongoDB中的mmap模仿内存数据库
把握住朴素而永恒的经典!