我想使用我的多线程编程技能(我有技能),但我意识到这是不够的。如果操作系统没有意识到这种可能性,我的线程可能仍然会竞争相同的内核。在英特尔至强体系结构上,我可以使用什么操作系统/编译器/库组合将线程连接到内核?
发布于 2009-02-03 19:10:07
所有现代操作系统都在所有可用内核上分发线程;但是有几种语言或库阻止了这种情况的发生。最常见的问题是:
此外,最好记住,在大多数CPU密集型应用程序中,最大的瓶颈是RAM带宽,通常不是CPU本身,因此让多个线程争夺相同的内存可能不是最佳设计。通常,在几个通过小消息通信的独立进程中进行重构要好得多。
发布于 2009-02-03 18:28:16
在每个操作系统上。这几乎就是线程的定义。
如果您创建了一个启动两个线程的应用程序,那么操作系统可以将这两个线程放在两个独立的核心上。对于Windows、OSX、Linux和您能想到的任何其他操作系统都是如此。
发布于 2009-02-07 17:52:35
既然你“有技能”,我假设你已经知道,几乎所有现代操作系统都会在多核上执行你的线程,如果它们是可用的,并且你的线程不会有某种锁定问题,从而有效地使它们按顺序执行。
所以我猜你实际上是在问如何将你的线程绑定到核心上,这样它们就不会相互竞争。这可以通过设置线程的处理器亲和性来完成。下面是有关Windows和Linux的文章的链接。我相信其他版本的Unix也存在其他版本。我还会注意到,这通常是不必要的,因为在某些特殊情况下,操作系统会更好地知道在哪里调度线程。请记住,现代OSes是多进程的,因此您的线程不仅仅是相互竞争,它们还在与所有其他进程中的线程竞争。根据负载的不同,将线程限制在单个内核中实际上可能会使它们更快。
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
https://stackoverflow.com/questions/508301
复制相似问题