伪共享:当你的多线程代码慢了100倍却找不到原因

2011年,LMAX交易平台的工程师们遇到一个奇怪的问题:他们的高性能消息队列在生产环境中表现不佳,但代码逻辑完全正确,线程安全措施也到位。经过深入排查,问题竟出在两个相邻的变量上——它们恰好落在同一个缓存行中。 ...

10 min · 4900 words

MESI协议:多核处理器如何在"看不见"彼此的情况下保持数据一致

1983年,James Goodman在IEEE COMPCON会议上发表了一篇题为《Using Cache Memory to Reduce Processor-Memory Traffic》的论文。这篇论文首次提出了"监听"(Snooping)的概念——让多个处理器通过监听共享总线上的事务来维护缓存一致性。当时的计算机界正处于从单处理器向多处理器过渡的关键时期,Goodman的发现为后来的对称多处理(SMP)系统奠定了基础。 ...

13 min · 6396 words

x86虚拟化的二十年突围:从「不可虚拟化」到云计算基石

1974年,ACM通讯发表了一篇题为《Formal Requirements for Virtualizable Third Generation Architectures》的论文。作者Gerald Popek和Robert Goldberg提出了一个看似简单的数学条件:一个处理器架构要支持"经典虚拟化",其所有敏感指令都必须是特权指令。 ...

14 min · 6924 words

内存对齐:为什么你的结构体可能比预期大三倍

一个看似简单的面试题:在64位系统上,下面的结构体占多少字节? struct Example { char a; // 1字节 int b; // 4字节 char c; // 1字节 double d; // 8字节 }; 把所有成员的大小加起来:1 + 4 + 1 + 8 = 14字节。但实际答案是24字节——比预期多了71%。 ...

10 min · 4802 words