首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在哪个操作系统上,线程编程足以利用多核?

在哪个操作系统上,线程编程足以利用多核?
EN

Stack Overflow用户
提问于 2009-02-03 18:25:17
回答 8查看 660关注 0票数 2

我想使用我的多线程编程技能(我有技能),但我意识到这是不够的。如果操作系统没有意识到这种可能性,我的线程可能仍然会竞争相同的内核。在英特尔至强体系结构上,我可以使用什么操作系统/编译器/库组合将线程连接到内核?

EN

回答 8

Stack Overflow用户

发布于 2009-02-03 19:10:07

所有现代操作系统都在所有可用内核上分发线程;但是有几种语言或库阻止了这种情况的发生。最常见的问题是:

  • 绿色线程。当多个CPU很少,而且操作系统没有得到充分优化时,它曾经具有性能优势。有几个Java吹嘘这是一个特性,后来转向M:N方案,我想现在是N:N everywhere.
  • GIL:Global解释器锁。一些脚本语言在解释器循环中有很多全局状态,因此有一个大的(互斥)锁来确保一致性;但这会阻止同一“空间”中的两个线程同时运行。至少Python和Lua有这个问题。在这些情况下,最好使用多个进程,而不是多线程。

此外,最好记住,在大多数CPU密集型应用程序中,最大的瓶颈是RAM带宽,通常不是CPU本身,因此让多个线程争夺相同的内存可能不是最佳设计。通常,在几个通过小消息通信的独立进程中进行重构要好得多。

票数 7
EN

Stack Overflow用户

发布于 2009-02-03 18:28:16

在每个操作系统上。这几乎就是线程的定义。

如果您创建了一个启动两个线程的应用程序,那么操作系统可以将这两个线程放在两个独立的核心上。对于Windows、OSX、Linux和您能想到的任何其他操作系统都是如此。

票数 4
EN

Stack Overflow用户

发布于 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/508301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档