在多核处理器中,Windows应用程序运行许多线程。线程默认在多个核心上运行吗? 我的意思是每个线程都可能在单个核心上运行。
修改
如果我的应用程序运行多个线程,则所有这些线程都将在一个进程上运行。
没有并行编程..
该流程是否能够在许多核心上进行分配和运行?
我的应用程序是否有利于多核处理?
答案 0 :(得分:15)
(你的问题还不太清楚。我希望我已经回答了你的问题,但是如果你能澄清一下有用的问题。)
由安排线程的操作系统决定。如果可能的话,在缓存一致性等方面将线程保持在同一个核心上是有好处的 - 但强制它保持在同一个核心上通常过于严格。
简而言之:是的,一个线程可以运行在不同的核心上。当然不是在同一时间 - 它只是一个执行线程 - 但它可以在时间T 0 的核心C 0 上执行,然后在核心C 1 时> 1 。
编辑:你谈到运行许多线程的应用程序,但“没有并行编程” - 这是一个矛盾的术语。如果您使用多个线程,则 使用并行编程,默认情况下,这些线程可以在多个内核上运行。如果您只使用一个线程,那么您将无法从拥有多个内核中获得任何好处 - 当然,除了其他进程可以使用其他内核的事实之外。答案 1 :(得分:11)
当你启动多个线程时,它们可能会或可能不会在不同的核心上运行。
如果绝对必要,您可以使用SetProcessorAffinity的Thread class方法强制线程运行特定核心。除非你知道为什么需要这样做,否则你真的不应该这样做。
由操作系统来安排线程。
为了最好地利用多个核心,网上有大量的教程和知识文章,但这里有一些提示:
答案 2 :(得分:1)
不,因此Microsoft发布了.NET Parallel API:
此API专为简化多核并行编程而设计。
答案 3 :(得分:-1)