哪个操作系统的线程编程足以利用多个内核?
我想用我的多线程编程技巧(我有技能),但我意识到这还不够。 如果操作系统没有意识到潜力,我的线程可能仍然会争夺同一个内核。 我可以在Intel Xeon架构上使用什么操作系统/编译器/库组合来连接到内核?
所有现代操作系统在所有可用内核上分配线程; 但有几种语言或库可以防止这种情况发生。 最常见的问题是:
绿色的线程。 它曾经有一个性能优势,当多个CPU很少,操作系统没有足够优化。 有一些Java虚拟机将它作为一个功能,后来转向M:N方案,而且我认为它现在到处都是N:N。
GIL:全球互联网锁。 一些脚本语言在解释器循环中有很多全局状态,所以有一个大的(互斥锁)来确保一致性; 但是这可以防止同一个“空间”的两个线程同时运行。 至少Python和Lua有这个问题。 在这些情况下,最好使用多个进程而不是多个线程。
另外,最好记住,大多数cpu绑定应用程序中最大的瓶颈是RAM带宽,通常不是CPU本身,所以有多个线程争夺相同的内存可能不是最好的设计。 在通过小消息进行通信的几个单独进程中重构通常要好得多。
在每个操作系统上。 这几乎是线程的定义。
如果您创建一个启动两个线程的应用程序,则操作系统可以将这些线程放在两个独立的核心上。 对于Windows,OSX,Linux以及您可以想到的任何其他操作系统都是如此。
既然你“掌握了技能”,我会假设你已经知道,几乎所有的现代操作系统都会在多个内核上执行你的线程,如果它们可用,并且你的线程没有某种锁定问题,从而有效地使它们顺序化。
所以我会猜测你确实在问如何将你的线程绑定到内核上,以便它们不会相互竞争。 这是通过设置线程的处理器亲和性来完成的。 以下是适用于Windows和Linux的文章链接。 我相信别人也会为其他类型的Unix而存在。 我还会注意到这通常不是必需的,因为除了一些特殊情况之外,操作系统知道在哪里安排线程。 请记住,现代操作系统是多进程的,所以你的线程不仅仅是相互竞争,而且它们与盒子上所有其他进程的线程竞争。 根据负载的不同,将线程限制为单个内核可能实际上使其更快。
http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/core/fnef_mul_dnpl.mspx?mfr=true
http://www.ibm.com/developerworks/linux/library/l-affinity.html
链接地址: http://www.djcxy.com/p/36863.html上一篇: On which operationg system is threaded programming sufficient to utilize multiple cores?