我还要说一点 RTFM,因为你的问题很广泛,需要大量的教育性阅读材料。尤其是关于微处理器和并发性。(可以任意顺序阅读,甚至可以纠缠)
因此,您必须按以下顺序阅读:
- cpu 执行管道
- cpu缓存/分层内存
- NUMA
- 多线程编程
我们走吧。
中央处理器
这是一篇关于无序现代处理器的非常好的文章:
http://www.gamedev.net/page/resources/_/technical/general-programming/a-journey-through-the-cpu-pipeline-r3115
这很好,评论将为您提供进一步的学习链接。
考虑到您的问题以及如何制定它,了解更多关于 CPU 中真正发生的事情是非常重要的。
缓存
还有一些关于缓存如何工作的精彩文章,这将是上述文章(讨论管道)的完美补充:
===> http://lwn.net/Articles/250967/ <===
This previous link是链接!
作为旁白,但会以更快的阅读方式说同样的话:
http
://www.hardwaresecrets.com/article/How-The-Memory-Cache-Works/481/1 http://web.cs.mun。 ca/~paul/cs3725/material/web/notes/node3.html
非常全面:
http ://en.wikipedia.org/wiki/CPU_cache
或者这个“初学者”语气,更容易阅读:
http ://arstechnica.com/gadgets/2002/07/caching/
NUMA
现在,关于您的“RAM 在内核之间划分”?问题,它确实可以在NUMA 系统中发生:http :
//msdn.microsoft.com/en-us/library/windows/desktop/aa363804
(v=
vs.85).aspx NUMA 存在于 opteron 和核心 i7 处理器中,虽然仅在服务器配置上激活。但是这项技术是存在的(并且已经存在了很长时间)。
编程
然后这个是关于记忆障碍的:http :
//mechanical-sympathy.blogspot.jp/2011/07/memory-barriersfences.html
以下是关于“同一进程的多个线程是否将在不同的 CPU 上运行”的问题:
http
://www2.cs.ucy.ac.cy/carch/xi/papers/MigrationCAN.pdf
快速答案是“当然可以”,而且他们也会不时移动(迁移)。
关于无锁(你可能听说过),关于性能多线程编程的一个很好的观点的个人建议,它通过说来减轻无锁:
不保证无锁算法比使用锁的算法更快
这应该更多地进入人们的脑海:http:
//msdn.microsoft.com/en-us/library/windows/desktop/ee418650 (v=vs.85).aspx
然后我推荐这个(我自己的文章):
http
://www.gamedev.net/page/resources/_/technical/general-programming/multithreading-r3048
从某种意义上说,它的教育程度较低,对于已经警告过的程序员来说,它更多的是没有建立它的教学流程。但也许是一个很好的回顾。它也是我强烈建议您仔细阅读的优质链接。
值得注意的是 Alexandrescu 的无锁数据结构:http:
//erdani.com/publications/cuj-2004-10.pdf
好书!